Главная » Полезные статьи » Язык PHP » Гостевая книга на PHP
Распечатать статью

Гостевая книга на PHP

В рассмотренном примере гостевой книги каждая запись хранится в отдельном файле.
Имя файла создается автоматически, и состоит из двух частей — префикса и
уникального идентификатора. Префикс нам необходим для того, чтобы отличить наш
файл, от любого другого находящегося в том же каталоге (Честно говоря, по
хорошему, в том же каталоге больше ничего не должно находиться), а уникальный
идентификатор необходим для того, чтобы отличить одну запись от другой, и
предоставить возможность сортировки записей.

В нашем случае префикс будет — «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>

$msg=eregi_replace(«(.*)\\[url\\](.*)\\[/url\\](.*)»,

«\\1<a href=\\2>\\2</a>\\3″,$msg);

$msg=str_replace(«\n»,» «,$msg);

$msg=str_replace(«\r»,» «,$msg);

Теперь данные готовы к сохранению в файл. Файлы с записями у нас будут храниться
в каталоге ./records.

$fp=fopen(«records/rec.».time(),»w»);

fputs($fp,$name.»\n»);

fputs($fp,$email.»\n»);

fputs($fp,$city.»\n»);

fputs($fp,$www.»\n»);

fputs($fp,$msg.»\n»);

fclose($fp);

Все действия произведены, и мы можем смело отправить пользователя на главную
страницу гостевой книги, где он сможет увидеть свою запись.

print «<HTML><HEAD>\n»;

print «<META HTTP-EQUIV=’Refresh’ CONTENT=’0; URL=index.php’>\n»;

print «</HEAD></HTML>\n»;

}

}

Если переменная $action пуста, то выводим форму добавления записи

if (empty($action)) {

?>

<HTML>

<HEAD>

<TITLE>Гостевая книга — добавить запись</TITLE>

</HEAD>

<BODY>

<?

if (!empty($errro)) {

print «<P>Во время добавления записи произошли следующие ошибки: </P>\n»;

print «<UL>\n»;

print $err;

print «</UL>\n»;

}

?>

<H3>Добавление записи.</H3>

<center>

<table width=1 border=0>

<form action=add.php method=post>

<input type=hidden name=action value=post>

<tr><td width=50%>Имя<font color=red><sup>*</sup></font>:</td>

<td align=right>

<input type=text name=name maxlength=32 value='<? echo $name; ?>’></td></tr>

<tr><td width=50%>E-Mail:</td>

<td align=right>

<input type=text name=email maxlength=64 value='<? echo $email; ?>’></td></tr>

<tr><td width=50%>Домашняя страница (WWW):</td>

<td align=right>

<input type=text name=www maxlength=64 value='<? echo $www; ?>’></td></tr>

<tr><td width=50%>Город:</td>

<td align=right>

<input type=text name=city maxlength=64 value='<? echo $city; ?>’></td></tr>

<tr><td colspan=2>Сообщение<font color=red><sup>*</sup></font>:<br>

<textarea cols=50 rows=8 name=msg><? echo $msg; ?></textarea></td></tr>

<tr><td colspan=2><input type=submit value=’Добавить’></td></tr>

</form>

</table>

</center>

<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;

Выводим ссылки навигации по гостевой книги «Предыдущие» и «Следующие»

print «<center>»;

if ($count>$start+10) $count=$start+10;

if ($start!=0)

print «[ <A href=index.php?start=».($start-10).»>Предыдущие</A> ]»;

print » [ <a href=add.php>Добавить запись</A>] «;

if ($cnt>$start+10) {

print «[ <A href=index.php?start=».($start+10).»>Следующие</A> ]\n»;

print «</center><br>»;

Теперь самое главное — считываем нужные нам записи и выводим их.

for ($i=$start;$i<$count;$i++) {

$entry=$names[$i];

$data=file(«records/rec.».$entry);

$date=$entry;

$name=trim($data[0]);

$email=trim($data[1]);

$city=trim($data[2]);

$www=trim($data[3]);

$question=trim($data[4]);

$answer=trim($data[5]);

print «<table border=0 cellspacing=0 cellpadding=2 width=100%>»;

print «<tr bgcolor=#F0F0F0><td> «;

if (!empty($email)) print «<a href=mailto:$email>$name</A>\n»;

else print $name;

if (!empty($www)) print «[<a href=$www>$www</A>]»;

print «</td><td align=right>».date(«H-i-s <b>d-m-Y</b>»,$date);

print «</td></tr>\n<tr><td colspan=2>\n»;

print «<P>».$question.»</P>\n»;

if (!empty($answer)) print «<P><B><I>$answer</I></B></P>\n»;

print «</td></tr></table>\n<br><br>\n»;

}

Опять выводим ссылки навигации по гостевой книги «Предыдущие» и «Следующие»

print «<center>»;

if ($start!=0)

print «[ <A href=index.php?start=».($start-10).»>Предыдущие</A> ]»;

print » [ <a href=add.php>Добавить запись</A>] «;

if ($cnt>$start+10)

print «[ <A href=index.php?start=».($start+10).»>Следующие</A> ]\n»;

print «</center>»;

?>

</BODY>

</HTML>

Ну вот вроде все.

Источник:   codingrus.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи