Гостевая книга своими руками на PHP и MySQL

В этой статье рассматривается вопрос о том, как сделать гостевую книгу средствами 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'";    // цвет для нечетных записей
       
       
?>
        <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>

Проверка правильности заполнения формы происходит на стороне клиента, для чего реализована 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.

Взято с http://www.internet-technologies.ru/articles/article_1389.html


Ведете ли вы блог?

Да
Нет
Планирую


Результаты опроса

Новостной блок