Гостевая книга на PHP
В этой статье рассказывается о том, как создать гостевую книгу, описывается её структура и реализация. За пределами статьи остаются дизайн, вёрстка, оформление и т.д...
Сделаем гостевую книгу своими руками. Для этого нам понадобятся
PHP,
MySQL и немного свободного времени. Сообщения будем хранить в базе данных, а не во внешнем файле. Это позволит упростить задачу и повысить быстродействие.
Для начала нам необходимо создать базу данных. Назовём её mydb. В ней мы создадим таблицу gost, в которой будут храниться сообщения.
SQL-код для создания базы данных для гостевой книги выглядит так:
Код:
create database mydb;
use mydb;
create table gost
(
textid int unsigned not null auto_increment primary key,
dt int not null,
name char(16) not null,
txt text not null
);
Для гостевой книги будем использовать следующую структуру из 3 файлов:
gst.php – основная программа;
db.php – сценарий, содержащий функцию для подключения к базе данных;
units.php – функции, необходимые для работы гостевой книги.
В файле db.php находится одна лишь функция db_connect(), которая устанавливает соединение с MySQL и выбирает базу данных mydb.
В файле units.php размещены функции:
readgost() – считывает сообщения из базы данных;
printmessages($n,$r) – выводит оставленные сообщения;
savegost($UserName,$n,$txt) – сохраняет сообщение в гостевой книге;
showgostform() – выводит форму отправки сообщения.
Сначала создадим основной файл, который будет вызывать необходимые функции.
Код:
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
//Подключение модулей
require(‘db.php’);
require(‘units.php’);
//Подключение к базе данных
db_connect();
//Считывание сообщений и определение их количества.
$r=readgost();
$n=mysql_num_rows($r);
//Создание коротких имён переменных
$UserName = $HTTP_POST_VARS['username'];
$gost = $HTTP_POST_VARS['gost'];
$txt = $HTTP_POST_VARS['txt'];
// Если была нажата кнопка отправки сообщения,
//сохраняем сообщение в базе данных
//и снова считываем сообщения и определяем их количество.
if ($gost==true)
{
savegost($UserName,$n,$txt);
$r=readgost();
$n=mysql_num_rows($r);
}
//Выводим количество оставленных сообщений.
echo '<h2>Оставлено '. $n.'сообщение(ий)</h2>';
//Выводим оставленные сообщения
printmessage($n,$r);
//Показываем форму отправки сообщений.
showgostform();
?>
В PHP может быть установлен высокий уровень контроля ошибок. Из-за этого могут возникать предупреждения. Такой режим вывода ошибок является рекомендуемым. Он будет полезен при отладке скриптов. Однако для большинства скриптов нет необходимости его устанавливать, и следует пользоваться более слабым уровнем контроль ошибок. Мы это сделали так:
Error_Reporting(E_ALL & ~E_NOTICE);
Однако рекомендуется использовать следующий способ. В директории со скриптом надо создать файл .htaccess содержащий строчку:
php_value error_reporting 7
Рассмотрим файл db.php
Код:
<?php
Function db_connect()
{
//Подключение к MySQL
@ $db = mysql_pconnect('имя_узла','пользователь','пароль');
if (!db)
{
//соединение не установлено
Echo 'Не удалось установить соединение с базой данных.
Пожалуйста, повторите попытку позже.';
return 0;
}
else
{
//Выбираем базу данных mydb
$b = Mysql_select_db("mydb");
if (!$b)
{
//Баз данных не выбрана
Echo 'Не удалось выбрать базу данных.
Пожалуйста, повторите попытку позже.';
return 0;
}
return 1;
}
}
?>
Теперь пора создавать функции в файле units.db, которые будут выполнять все необходимые действия.
Код:
function readgost()
{
$query = "select * from gost";
$result = mysql_query($query);
return $result;
}
В переменную $query помещаем SQL-запрос для извлечения всех данных из таблицы gost. Функция mysql_query() выполняет переданные ей команды и возвращает результат.
Теперь рассмотрим, как происходит вывод сообщений. За это, как было ранее сказано, отвечает функция printmessages($n,$r).
Код:
function printmessages($n,$r)
{
$outprint = array();
for ($i=0; $i <$n; $i++)
{
$outprint[$n-$i-1] = mysql_fetch_array($r);
}
//сортируем как надо
for ($i=0; $i <$n-1; $i++)
{
for ($j=$i+1; $j <$n; $j++)
{
$row1=$outprint[$i];
$arr1 = $row1['textid'];
$row2=$outprint[$j];
$arr2 = $row2['textid'];
if ($arr1<$arr2)
{
$arr3=$outprint[$i];
$outprint[$i]=$outprint[$j];
$outprint[$j]=$arr3;
}
}
}
?><?php
// Выводим сообщения
for ($i=0; $i <$n; $i++)
{
$row=$outprint[$i];
echo '<br><b>'.($i+1).'. </b>'.
date(" d/m/Y H:i:s",stripslashes($row['dt'])).
'<b>Отправитель:</b><i>'.
htmlspecialchars(stripslashes($row['name'])).'</i>';
echo '<br><b>Текст сообщения:</b><br>'.
htmlspecialchars(stripslashes($row['txt'])).'<br>';
}
}
Функция htmlspecialchars() нужна для удаления HTML тегов. Также используется функция stripslashes(). Она восстанавливает специальные символы, которые были отменены функцией addslashes() при сохранении сообщений в базу данных.
Код:
function savegost($UserName,$n,$txt)
{
//Определяем время
$t = mktime();
//проверяем, были ли заполнены поля формы.
//Если да, то сохраняем сообщение.
if (!$UserName)
{
Echo('Вы не ввели своё имя.');
}
elseif (!$txt)
{
echo 'Вы не ввели текст сообщения.';
}
else
{
//Отменяем специальные символы.
$UserName = addslashes($UserName);
$txt = addslashes($txt);
$n++;
//заносим в переменную $query SQL-запрос,
//необходимый для сохранения сообщения.
$query = "insert into gost values
('".$n."','".$t."','".$UserName."','".$txt."')";
$result = mysql_query($query);
if (!$result)
{
echo '<p>Извините,'.
'ваше сообщение сохранить не удалось.</p>';
}
}
}
Теперь перейдём к созданию формы отправки сообщения. За это отвечает функция showgostform().
Код:
function showgostform()
{
?>
<form ACTION="gost.php" METHOD=POST >
<FIELDSET STYLE="padding: 10px; width: 300px;">
<LEGEND>
Форма отправки сообщения:
</LEGEND>
Ваше имя :
<input type="text" width="400" name="username" ><br>
Поле для ввода:
<TEXTAREA name = "txt">
<INPUT TYPE="submit" value = "Отправить" name='sub'>
<INPUT TYPE="reset" value="Очистить" >
<input type="hidden" value="true" name="gost">
</FIELDSET>
</form>
<?php
}