В этой статье рассматривается вопрос о том, как сделать гостевую книгу средствами PHP и MySQL. Приведен исходный код и некоторые пояснения к нему. Естественно, разобран самый простой вариант создания гостевой книги, без каких либо наворотов и дополнительных возможностей.
Наша гостевая книга будет состоять из трех php-файлов, одной базы данных и одной таблицы MySQL.
В данной статье приведены только фрагменты кода гостевой книги. Скачать полные исходные коды гостевой книги можно здесь, 2 кб.
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.");
// название сервера БД
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'"; // цвет для нечетных записей
-
- ?>
- <table border="0" cellspacing="3" cellpadding="0" width="90%"
- <? echo $col; ?> style="margin: 10px 0px;">
- <tr>
- <td width="150" style="color: #999999;">Имя пользователя:</td>
- <td><?php echo $row['username']; ?></td>
- </tr>
- <tr>
- <td width="150" style="color: #999999;">Дата опубликования:</td>
- <td><?php echo $row['dt']; ?></td>
- </tr>
- <tr>
- <td colspan="2" style="color: #999999;">
- ---------------------------------------------------------------
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <?php echo $row['msg']; ?>
- <br>
- </td>
- </tr>
-
- </table>
- <?php
- $c++;
- }
-
- if ($c==0) // если ни одной записи не встретилось
- echo "Гостевая книга пуста!<br>";
$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'"; // цвет для нечетных записей
?>
<table border="0" cellspacing="3" cellpadding="0" width="90%"
<? echo $col; ?> style="margin: 10px 0px;">
<tr>
<td width="150" style="color: #999999;">Имя пользователя:</td>
<td><?php echo $row['username']; ?></td>
</tr>
<tr>
<td width="150" style="color: #999999;">Дата опубликования:</td>
<td><?php echo $row['dt']; ?></td>
</tr>
<tr>
<td colspan="2" style="color: #999999;">
---------------------------------------------------------------
</td>
</tr>
<tr>
<td colspan="2">
<?php echo $row['msg']; ?>
<br>
</td>
</tr>
</table>
<?php
$c++;
}
if ($c==0) // если ни одной записи не встретилось
echo "Гостевая книга пуста!<br>";
Код формы для отправки сообщений выглядит следующим образом:
- <form name="myForm" action="action.php" method="post" onSubmit="return splash();">
- <input type="hidden" name="action" value="add">
- <table border="0">
- <tr>
- <td width="160">
- Имя пользователя:
- </td>
- <td>
- <input name="username" style="width: 300px;">
- </td>
- </tr>
- <tr>
- <td width="160" valign="top">
- Сообщение:
- </td>
- <td>
- <textarea name="msg" style="width: 300px;"></textarea>
- </td>
- </tr>
- <tr>
- <td width="160">
-
- </td>
- <td>
- <input type="submit" value="Отправить сообщение">
- </td>
- </tr>
- </table>
- </form>
<form name="myForm" action="action.php" method="post" onSubmit="return splash();">
<input type="hidden" name="action" value="add">
<table border="0">
<tr>
<td width="160">
Имя пользователя:
</td>
<td>
<input name="username" style="width: 300px;">
</td>
</tr>
<tr>
<td width="160" valign="top">
Сообщение:
</td>
<td>
<textarea name="msg" style="width: 300px;"></textarea>
</td>
</tr>
<tr>
<td width="160">
</td>
<td>
<input type="submit" value="Отправить сообщение">
</td>
</tr>
</table>
</form>
Проверка правильности заполнения формы происходит на стороне клиента, для чего реализована JavaScript-функция splash();
- function splash()
- {
- if (document.myForm.username.value =='')
- {
- alert ("Заполните имя пользователя!");
- return false;
- }
-
- if (document.myForm.msg.value =='')
- {
- alert ("Заполните текст сообщения!");
- return false;
- }
-
- return true;
- }
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");
- ?>
<?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.
дизайн вашего дома
обеспечим теплом загородный дом
утилизация вредных отходов
|