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