Guest User

Untitled

a guest
Mar 9th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 6.81 KB | None | 0 0
  1. class 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); //получаем массив с полями записи
  85. echo implode("; ", $res); //выводим содержимое массива в необходимом формате
  86.  
  87. /* Конечено этот код не идеален, ибо нет предела совершенству. Сюда не мешало бы добавить обработку исключений
  88.   и ошибок, возможно стоило описать отдельный класс для записи из БД и уже в нем реализовывать метод, возвращающий
  89.   значения полей записи и метод, который меняет статус записи на противоположный. Однако, вышеприведенный код
  90.   в полной мере решает задачу, описанную в тестовом задании и
  91.   написан в соответсвии с принципами ООП. */
Add Comment
Please, Sign In to add comment