Guest User

Untitled

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