PHP. Разработка модуля комментариев для сайта
Шрифт:
(1, 'admin')";
/* Для комментариев */
$sql_say = "CREATE TABLE IF NOT EXISTS say (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
saytext TEXT,
userid int(11),
saydate int(11)
) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB";
/* Для ответов на комментарии */
$sql_reply = "CREATE TABLE IF NOT EXISTS reply (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
replytext TEXT,
userid int(11),
replyid int(11),
replydate int(11)
) DEFAULT CHARACTER SET utf8 ENGINE=InnoDB";
/* 4.
$dsn->exec($sql_users);
$dsn->exec($sql_authorrole);
$dsn->exec($sql_role);
$dsn->exec($sql_roledesc);
$dsn->exec($sql_userole);
$dsn->exec($sql_say);
$dsn->exec($sql_page);
$dsn->exec($sql_reply);
} catch (PDOException $e) {
echo $e->getMessage;
}
/* 5. Смайлы */
try {
$sql_smile = "CREATE TABLE IF NOT EXISTS smiles (
id INT(11) AUTO_INCREMENT PRIMARY KEY NOT NULL,
smile text,
path text)";
$dsn->exec($sql_smile);
} catch (PDOException $e) {
echo $e->getMessage;
echo $e->getLine;
exit;
}
$dir = $_SERVER['DOCUMENT_ROOT'].'/chat/say/smiles/';//строим путь к папке smiles
$files1 = preg_grep('~\.(jpeg|jpg|png|gif)$~', scandir($dir));//делаем массив из картинок в папке smiles
try {
$sql = 'INSERT INTO smiles SET
smile = :smile,
path = :path';
$s = $dsn->prepare($sql);
foreach ($files1 as $val) {
$smile = pathinfo($val, PATHINFO_FILENAME); //получаем путь к смайлу
$smile = str_replace($smile, ":$smile:", $smile); //делаем условное обозначение смайла
$path = '/chat/say/smiles/'.$val;//строим наш путь к смайлу
$s->bindValue(':smile', $smile);
$s->bindValue(':path', $path);
$s->execute;
}
} catch (PDOException $e) {
echo $e->getMessage;
echo $e->getLine;
exit;
}
echo '<br>'.'Все таблицы успешно созданы';
В этом файле мы сначала включаем вывод всех сообщений об ошибках кодом: error_reporting(E_ALL). Это необходимо на этапе разработки, чтобы иметь возможность сразу выявлять и обрабатывать ошибки. После отладки всего приложения данную строку необходимо будет или удалить или закомментировать.
Затем подключаемся к СУБД MySQL. Для подключения необходимы следующие параметры:
Имя хоста: $host = "localhost";
Имя пользователя СУБД: $root = "root";
Пароль к СУБД: $root_password = "";
Для подключения к БД:
Название БД: $db = "beseder",
Первые три значения по умолчанию. На реальном сайте предоставляются «хостером». Четвертый параметр это название для создаваемой новой базы данных. В ней будут хранится комментарии, ее название придумывается самостоятельно. У меня БД названа «beseder».
Далее подключаемся
к СУБД MySQL при помощи PDO (PHP Data Objects), PDO определяет интерфейс для доступа к базам данных в PHP[manual]. Подключение выполняется согласно мануала PDO с явным перехватом ошибок в блоке catch[7].Внимание! далее все подключения к бд будут выполнятся только с использованием блоков try и Catch
При успешном создании БД выводится сообщение: 'База создана (OK!)Имя базы $db’. После создания базы закрываем подключение.
Снова открываем подключение, но теперь коннектимся не к СУБД, а к созданной БД. Создаем и затем выполняем SQL запросы на создание таблиц.
Типы полей для хранения данных принимаем следующие:
– для чисел «int»;
– для текста «text»;
– для коротких строк «varchar».
Смайлы, выделены в отдельный блок. Принцип работы следующий, проверяем папку «smiles» на наличие картинок:
$files1 = preg_grep('~\.(jpeg|jpg|png|gif)$~', scandir($dir));
где preg_grep возвращает массив, состоящий из элементов входящего массива, которые соответствуют заданному шаблону, в данном случае из папки «smiles» возвращаются только «картинки».
Создаем в цикле условные обозначения для смайлов:
$smile = pathinfo($val, PATHINFO_FILENAME);
$smile = str_replace($smile, ":$smile:", $smile);
где pathinfo – возвращает информацию о пути к файлу,
str_replace (что меняем, на что меняем, где меняем) – заменяет все вхождения строки поиска на строку замены;
и строим пути к картинкам:
$path = '/say/smile/'.$val;
При успешном завершении кода выводим сообщение:
echo '<br>'.'Все таблицы успешно созданы';
Запускаем сайт. Добавляем после «news» в адресную строку /chat/admin/createbase.php. Обновляем страницу. Должно получиться следующее.
Рис. 11 Результат работы файла createbase.php
Заходим в phpMyAdmin и проверяем. В списке БД должна появится новая база «beseder».
phpMyAdmin находится на вкладке «дополнительно» «Open Server».
Рис. 12. Проверяем наличие созданной БД
Файл работает. Для интереса, можете посмотреть, какие таблицы созданы.
На данном этапе БД не нужна, поэтому удаляем. В phpMyAdmin:
– выбираем базу «beseder»;
– жмём кнопку «Операции»;
– жмем кнопку «Удалить базу данных (DROP)».
Для того чтобы выполнять удаление не входя в phpMyAdmin средствами PHP, создаем файл «drop» и размещаем его также в папке «admin». Теперь можно будет удалять базу переходя по адресу: news/chat/admin/drop.php