· 8 years ago · Mar 09, 2018, 10:12 PM
1class DB { //оÑновной клаÑÑ, опиÑывает подключение к БД и Ñодержит методы Ð´Ð»Ñ Ñ€Ð°Ð±Ð¾Ñ‚Ñ‹ Ñ Ð½ÐµÐ¹
2 const DB_HOST = "localhost"; //хоÑÑ‚ MySQL
3 const DB_USER = "root"; //пользователь MySQL
4 const DB_PASS = ""; //пароль Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ MySQL
5 const DB_NAME = "testDB"; //название БД
6
7 private $dbconn; //здеÑÑŒ будет хранитьÑÑ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»ÑŒ на Ñоединение Ñ MySQL
8
9 public function __construct() { //в конÑтрукторе клаÑÑа оÑущеÑтвлÑетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ðµ к БД и ÑоздаетÑÑ Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ð° (еÑли она еще не Ñоздана)
10 $this->dbconn = mysql_connect(self::DB_HOST, self::DB_USER, self::DB_PASS); //ÑоединÑемÑÑ Ñ MySQL
11 mysql_select_db(self::DB_NAME); //переключаемÑÑ Ð½Ð° нужную БД
12
13 $sql = "CREATE TABLE IF NOT EXISTS testTable(
14 id INTEGER PRIMARY KEY AUTO_INCREMENT,
15 name TEXT,
16 email TEXT,
17 birthdate TEXT,
18 regdate INTEGER,
19 status BOOL)"; //формируем запроÑ, Ñоздающий таблицу, еÑли ее не ÑущеÑтвует
20
21 mysql_query($sql, $this->dbconn); //Ñоздаем таблицу
22 }
23
24 public function __destruct() { //деÑтруктор клаÑÑа закрывает Ñоединение Ñ Ð‘Ð”
25 mysql_close($this->dbconn); //закрываем Ñоединение Ñ MySQL
26 }
27
28 public function ImportFromCSV($filename) { //метод, оÑущеÑтвлÑющий импорт из CSV файла в БД
29 $file = fopen($filename, "r+"); //открываем CSV файл на чтение и запиÑÑŒ
30 fgetcsv($file); //перемещаем курÑор в файле на вторую Ñтроку (в первой хранÑÑ‚ÑÑ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ¸)
31
32 while ($line = fgetcsv($file, 0, "; ")) { //поÑтрочно читаем файл
33 $line[3] = strtotime($line[3]); //заменÑем дату региÑтрации на ее предÑтавление в виде целого чиÑла
34 $line[4] == "On" ? $line[4] = "true" : $line[4] = "false"; //преобразуем Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¡Ñ‚Ð°Ñ‚ÑƒÑа в логичеÑкие
35
36 $sql = "INSERT INTO testTable (name,email,birthdate,regdate,status)
37 VALUES ('" . $line[0] . "','" . $line[1] . "','" . $line[2] . "'," . $line[3] . "," . $line[4] . ")";
38 //формируем Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° добавление запиÑи в таблицу
39
40 $result = mysql_query($sql, $this->dbconn); //добавлÑем запиÑÑŒ в таблицу
41
42 if (!$result)
43 return false; //еÑли не удалоÑÑŒ добавить запиÑÑŒ, метод возвращает false
44
45 }
46
47 fclose($file); //закрываем CSV файл
48 return true; //вÑе прошло уÑпешно - метод возвращает true
49 }
50
51 public function GetByID($id) { //метод возвращает моÑÑив полей запиÑи из БД Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ значением id
52 $sql = "SELECT name,email,birthdate,regdate,status
53 FROM testTable WHERE id = " . $id; //формируем Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° извлечение запиÑи
54
55 $result = mysql_query($sql, $this->dbconn); //извлкаем запиÑÑŒ
56 if (!$result)
57 return false; //еÑли невозможно извлечь запиÑÑŒ, метод возвращает false
58 $line = mysql_fetch_assoc($result); //помещаем Ð¿Ð¾Ð»Ñ Ð·Ð°Ð¿ÑиÑи в аÑÑоциативный маÑÑив
59 $line["regdate"] = date("d.m.Y G:i", $line["regdate"]); //преобразуем Дату региÑтрации из целого значениÑ
60 //в Ñтроку Ñ Ð´Ð°Ñ‚Ð¾Ð¹ и временем
61 $line["status"] == 1 ? $line["status"] = "On" : $line["status"] = "Off"; //преобразуем Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ð¸Ð· логчеÑкого значениÑ
62 //в Ñтроку Ñо значением ÑтатуÑа
63 return $line; //возвращаем маÑÑив Ñо значениÑми полей запиÑи
64 }
65
66 public function ReverseStatus($id) { //метод менÑет ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° противоположный у запиÑи Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ id
67 $sql = "SELECT status FROM testTable WHERE id = " . $id; //формируем Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° извлечение Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑтатуÑа
68 $result = mysql_query($sql, $this->dbconn); //выполнÑем запроÑ
69 if (!$result)
70 return false; //еÑли невозможно извлечь запиÑÑŒ, метод возвращает false
71 $line = mysql_fetch_assoc($result); //запиÑываем результат в маÑÑив
72 $line["status"] == 1 ? $new_status = "false" : $new_status = "true"; //уÑтанавливаем новые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑтатуÑа
73 $sql = "UPDATE testTable SET status = " . $new_status . " WHERE id = " . $id; //формируем Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° изменеие ÑтатуÑа
74 mysql_query($sql, $this->dbconn); //выполнÑем запроÑ
75 return true; //вÑе в порÑдке - метод возвращает true
76 }
77
78}
79
80$testDB = new DB; //Ñоздаем новый объект БД
81$testDB->ImportFromCSV("test.csv"); //импортируем данные из CSV
82$id = rand(1, 8); //получаем Ñлучайное значение id (от 1 до 8, поÑкольку в иÑходных данных 8 запиÑей)
83$testDB->ReverseStatus($id); //менÑем ÑÑ‚Ð°Ñ‚ÑƒÑ Ñƒ запиÑи
84$res = $testDB->GetById($id); //получаем маÑÑив Ñ Ð¿Ð¾Ð»Ñми запиÑи
85echo implode("; ", $res); //выводим Ñодержимое маÑÑива в необходимом формате
86
87/* Конечено Ñтот код не идеален, ибо нет предела ÑовершенÑтву. Сюда не мешало бы добавить обработку иÑключений
88 и ошибок, возможно Ñтоило опиÑать отдельный клаÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи из БД и уже в нем реализовывать метод, возвращающий
89 Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ запиÑи и метод, который менÑет ÑÑ‚Ð°Ñ‚ÑƒÑ Ð·Ð°Ð¿Ð¸Ñи на противоположный. Однако, вышеприведенный код
90 в полной мере решает задачу, опиÑанную в теÑтовом задании и
91 напиÑан в ÑоответÑвии Ñ Ð¿Ñ€Ð¸Ð½Ñ†Ð¸Ð¿Ð°Ð¼Ð¸ ООП. */