Обычно гостевая книга состоит из двух частей: первая часть выводит записи, а
вторая добавляет их.
В рассмотренном примере гостевой книги каждая запись хранится в отдельном файле.
Имя файла создается автоматически, и состоит из двух частей - префикса и
уникального идентификатора. Префикс нам необходим для того, чтобы отличить наш
файл, от любого другого находящегося в том же каталоге (Честно говоря, по
хорошему, в том же каталоге больше ничего не должно находиться), а уникальный
идентификатор необходим для того, чтобы отличить одну запись от другой, и
предоставить возможность сортировки записей.
В нашем случае префикс будет - "rec", а уникальный идентификатор мы получим с
помощью функции time(). Функция time() возвращает текущее время, измеренное в
числе секунд с эпохи Unix (1 Января 1970 00:00:00 GMT). Конечно, абсолютно
уникальное число мы с помощью этой функции мы получить не сможем, но она нас
устроит.
Сначала мы рассмотрим исходный текст модуля добавления записи в гостевую книгу.
Файл add.php:
В переменной $err мы будем хранить сообщения о произошедших ошибках. Если
переменная пуста, то ошибок не происходило.
<?
$err="";
Если переменная $action не пуста, то значит происходит обращение при котором
необходимо добавить запись, иначе необходимо просто вывести форму добавления
записи. Переменная $action задается в форме с помощью тега <input type=hidden>
$action=$HTTP_POST_VARS["action"];
if (!empty($action)) {
Первым делом необходимо проверить введено ли сообщение и указан ли его автор.
$name=trim($name);
$msg=trim($msg);
if (empty($msg)) {$action="";$err=$err."<LI>Вы не ввели сообщение\n";}
if (empty($name)) {$action="";$err=$err."<LI>Вы не ввели имя\n";}
после этого мы должны осуществить преобразование введенных данных, проверить их
длину. Слишком длинные записи могут сильно испортить внешний вид страницы.
Необходимо убрать слеши "\" перед кавычками и заменить специальные символы HTML.
$name=substr($HTTP_POST_VARS["name"],0,32);
$name=htmlspecialchars(stripslashes($name));
$email=substr($HTTP_POST_VARS["email"],0,64);
$email=htmlspecialchars(stripslashes($email));
$www=substr($HTTP_POST_VARS["www"],0,64);
$www=htmlspecialchars(stripslashes($www));
$city=substr($HTTP_POST_VARS["city"],0,64);
$city=htmlspecialchars(stripslashes($city));
$msg=substr($HTTP_POST_VARS["msg"],0,1024);
$msg=htmlspecialchars(stripslashes($msg));
Если не произошло ошибок, то можно заменить специальные символы (такие как
[b],[i],[u]) на их HTML аналоги (<b>, <i>, <u>)
if (!empty($err)) {
$msg=nl2br($msg);
$msg=str_replace("[u]","<u>",$msg);
$msg=str_replace("[i]","<i>",$msg);
$msg=str_replace("[b]","<b>",$msg);
$msg=str_replace("[/u]","</u>",$msg);
$msg=str_replace("[/i]","</i>",$msg);
$msg=str_replace("[/b]","</b>",$msg);
С помощью регулярного выражения заменим запись типа
[url]http://www.codenet.ru/[/url] на <a
href=http://www.codenet.ru/>http://www.codenet.ru/</a>
<P>Используйте размету для [b]<B>выделения текста</B>[/b]
и вставки [url]гиперссылок[/url] </P>
</BODY>
</HTML>
<?
}
?>
Теперь рассмотрим модуль, ответственный за вывод записей гостевой книги.
Файл index.php:
<HTML>
<HEAD>
<TITLE>Гостевая книга</TITLE>
</HEAD>
<BODY>
<?
Первым делом, с помощью объекта dir, считаем содержимое каталога, в котором у
нас хранятся записи. Все идентификаторы записей мы сохраним в массив, для его
последующей сортировки.
$d = dir("records");
$i=0;
while($entry=$d->read()) {
if (substr($entry,0,3)=="rec") {
$names[$i]=substr($entry,4);
$i++;
}
}
$d->close();
Сортируем массив
@rsort($names);
$count=$i;
$cnt=$count;
if (empty($start)) $start=0;
$start=intval($start);
if ($start<0) $start=0;
Выводим ссылки навигации по гостевой книги "Предыдущие" и "Следующие"