| Гостевая книга |
|
|
|
|
Почти на каждом более-менее популярном сайте есть форум или гостевая книга, эти элементы нужны для постоянного общения автора сайта с его пользователями. Но многие начинающие веб-мастера не знают, как реализовать гостевую книгу или форум самостоятельно. Некоторые веб-мастера прибегают к использованию специальных интернет-сервисов, которые предоставляют уже готовый продукт в виде гостевых или форумов, расположенных на сайте этих сервисов и показывающих всем пользователям, которые заходят в вашу гостевую\форум свою рекламу. Это не лучший вариант, поэтому попробуем написать свою собственную гостевую книгу на php.
Генерация формыФорма для отправки сообщения пользователя скрипту-обработчику обычно хранится в шаблоне, который в свою очередь расположен в базе данных или в файле. В качестве простого примера можно использовать следующую форму с тремя полями (имя пользователя, e-mail, текст сообщения):
<form name="gbook" target="_self" method="post" action="gbook_add.php"> <table border="1" width="90%" align="center"> <tr> <td width="50%" align="right" valign="top">Ваше имя: </td> <td width="50%" align="left"><input type="text" name="username"></td> </tr> <tr> <td width="50%" align="right" valign="top">Ваш e-mail: </td> <td width="50%" align="left"><input type="text" name="email"></td> </tr> <tr> <td width="50%" align="right" valign="top">Ваше сообщение: </td> <td width="50%" align="left"><textarea name="message" rows="6" cols="37"></textarea></td> </tr> <tr> <td width="50%" colspan="2" align="center"><input type="submit" name="send" value="Добавить сообщение"></td> </tr> </table> </form> Вывод уже введенных сообщенийДля вывода сообщения нам понадобиться для начала написать php скрипт, который будет отвечать за вывод сообщений, а так же предопределить будущую структуру файла, в котором будут храниться сообщения пользователей.
Начнем с конца, и напишем структуру файла с сообщениями, назовем его к примеру messages.dat. Каждое сообщение расположено на отдельной строке, а элементы сообщения разбиты с помощью условного разделителя <|-|>: имя пользователя n<|-|>e-mail пользователя n<|-|>сообщение n<|-|>дата n ... имя пользователя 2<|-|>e-mail пользователя 2<|-|>сообщение 2<|-|>дата 2 имя пользователя 1<|-|>e-mail пользователя 1<|-|>сообщение 1<|-|>дата 1 Теперь осталось написать простой php скрипт, который будет выводить все записи из файла с сообщениями. В данном php скрипте будет реализован шаблонизированный вывод, т.е. в базовый шаблон сообщения будут подставляться значения переменных: <?php $filename = "messages.dat"; $delitmer = "<|-|>"; $shablon = ' <table border="1" width="100%"> <tr> <td width="100%">Имя пользователя: <a href="mailto:%email%">%username%</a></td> </tr> <tr> <td width="100%">%message%</td> </tr> <tr> <td width="100%" align="right">%add_date%</td> </tr> </table> <br>'; $data = @file($filename); foreach($data as $val) { list($username, $email, $message, $date) = explode($delitmer, trim($val)); $tmp_message = str_replace("%username%", $username, $shablon); $tmp_message = str_replace("%email%", $email, $tmp_message); $tmp_message = str_replace("%message%", $message, $tmp_message); $tmp_message = str_replace("%add_date%", $date, $tmp_message); echo $tmp_message; } ?> Обработка php-скриптом введенных данных и запись их в файл messages.datОбработка данных php скриптом заключается в проверке введенных данных (длинны, правильности). Мы будем проверять только длину полученных значений переменных:
Для повышения безопасности создадим отдельный php-скрипт gbook_add.php, который будет брать все значения из глобальной переменной $_POST и при этом заменять все опасные HTML и JavaScript теги на их эквиваленты, но безопасные. Вот код этого php скрипта: <?php $filename = "messages.dat"; $delitmer = "<|-|>"; $username_limit = 50; $email_limit = 80; $message_limit = 500; if (isset($_POST)) { if (isset($_POST['username']) & isset($_POST['email']) & isset($_POST['message'])) { if (((strlen($_POST['username'])>0) & (strlen($_POST['username'])<=$username_limit)) & ((strlen($_POST['email'])>0) & (strlen($_POST['email'])<=$email_limit)) & ((strlen($_POST['message'])>0) & (strlen($_POST['message'])<=$message_limit))) { $username = str_replace("\r\n", "<br>", htmlspecialchars($_POST['username'])); $email = str_replace("\r\n", "<br>", htmlspecialchars($_POST['email'])); $message = str_replace("\r\n", "<br>", htmlspecialchars($_POST['message'])); $arr = array($username, $email, $message, date("d.m.Y")); $new_message = implode($delitmer, $arr) . "\r\n"; $messages_arr = @file($filename); $messages_str = $new_message; $messages_str .= trim(implode("", $messages_arr)); $fp = fopen($filename, "w+"); fwrite($fp, $messages_str); fclose($fp); echo "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"2; URL=index.php\">"; echo "Ваше сообщение добавленно!"; } else { echo "Ошибка!!!<br>Не все данные введенны, либо в одном из полей формы слишком символов."; } } } ?> Это простейший вариант гостевой книги, написанной на php, который только показывает, по какому именно принципу работает гостевая книга или форум. В данной гостевой книге не реализованы такие важные возможности как защита гостевой от спам-ботов, удаление и редактирование сообщений, разбиение сообщений гостевой книги на страницы... Скачать исходник Автор: Беляев Александр По материалам сайта: http://wm-help.net/
|



