В этой статье рассматривается вопрос о том, как сделать гостевую книгу средствами PHP и MySQL. Приведен исходный код и некоторые пояснения к нему. Естественно, разобран самый простой вариант создания гостевой книги, без каких либо наворотов и дополнительных возможностей.
Наша гостевая книга будет состоять из трех php-файлов, одной базы данных и одной таблицы MySQL.
В данной статье приведены только фрагменты кода гостевой книги. Скачать полные исходные коды гостевой книги можно на сайте автора.
1. Подключаемся к СУБД, создаем базы и таблицы для гостевой книги
Файл dbconnect.php, служит для подлючения к серверу БД MySQL и создания базы данных и базы данных и необходимой таблицы для гостевой книги.
// название сервера БД define ("HOST", "localhost"); // название базы данных define ("DATABASE", "gb"); // пользователь MySQL define ("MYSQL_USER", "root"); // пароль к MYSQL define ("MYSQL_PASS", "");
// создаем базу данных и таблицу gb $link1=mysql_connect(HOST, MYSQL_USER, MYSQL_PASS) or die("Нет соединения с MySQL сервером!"); mysql_query ("CREATE DATABASE IF NOT EXISTS ".DATABASE) or die ("Не могу создать базу данных gb."); mysql_select_db(DATABASE) or die("Нет содениения с требуемой базой данных!"); mysql_query ("CREATE TABLE IF NOT EXISTS gb (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR (100), dt DATETIME, msg TEXT)") or die ("Не могу создать таблицу gb.");
Таблица gb создается с необходимыми нам полями: username - имя пользователя, оставляющего сообщение в гостевой; dt - время и дата сообщения; msg - текст сообщения. Если база данных и таблица уже имеются, то ничего не происходит.
Если уж очень хочется экономить на запросах к БД, то строки с созданием БД и созданием таблицы можно вынести в отдельный *.php файл-установщик, который надо будет запускать всего 1 раз.
Файл dbconnect.php мы будем загружать каждый раз, если есть необходимость обращения к БД.
2. Что у нас в БД? Выводим содержимое гостевой книги
Файл index.php служит для отображения содержимого гостевой книги и формы отправки сообщения.
Вывод сообщений гостевой книги осуществляется следующим блоком кода. Записи поочередно выдергиваются из результата запроса к базе данных. Порядок вывода таков: новые записи выше старых. Обратим также внимание на то, что подсветка чётных и нечётных сообщений выполняется разными цветами.
$c=0; // выбор всех записей из БД, отсортированных так, // что самая последняя отправленная запись будет всегда первой. $r=mysql_query ("SELECT * FROM gb ORDER BY dt DESC"); while ($row=mysql_fetch_array($r)) // для каждой записи организуем вывод. { if ($c%2) $col="bgcolor='#f9f9f9'"; // цвет для четных записей else $col="bgcolor='#f0f0f0'"; // цвет для нечетных записей
Проверка правильности заполнения формы происходит на стороне клиента, для чего реализована JavaScript-функция splash();
function splash() { if (document.myForm.username.value =='') { alert ("Заполните имя пользователя!"); return false; }
if (document.myForm.msg.value =='') { alert ("Заполните текст сообщения!"); return false; }
return true; }
Данные из формы передаются в файл action.php.
3. Добавляем записи в гостевую книгу
Файл action.php - ядро гостевой книги. В этот файл принимаются данные из формы отправки сообщения и может выполняться одно из двух действий: - добавление записи в гостевую книгу (при параметре action=add) - удаление всех записей из гостевой книги (при параметре action=delete)
Заметим, что случай, когда action=delete может наступить только тогда, когда эта команда будет передана в ручную, с помощью вызова action.php?action=delete.
<?php include ("dbconnect.php");
// получаем переменные из формы $username=$_REQUEST['username']; $msg=$_REQUEST['msg']; $action=$_REQUEST['action'];
if ($action=="add") { // добавление данных в БД $sql="INSERT INTO gb(username, dt, msg) VALUES ('$username', NOW(), '$msg')"; $r=mysql_query ($sql); }
if ($action=="delete") { // удаление базы гостевой $sql="DELETE FROM gb"; $r=mysql_query($sql); }
header("Location: index.php"); ?>
Файл action.php создан специально для того, чтобы не передавать данные в файл index.php. Если бы мы передавали данные в index.php, то при обновлении страницы или при пользовании кнопками "назад", "вперед" в браузере, мы бы могли встретиться с ситуацией излишней повторной отправки данных. Что приводило бы созданию дубликатов записей в гостевой книге и излишней путанице пользователей.
Файл action.php ничего не возвращает браузеру. При выполнении action.php происходит редирект на файл index.php.