В этой статье мы научимся создавать гостевую книгу на PHP. И хотя эта статья написана для новичков, но Вы должны обладать хотя бы азами программирования на PHP.
Итак, для начала давайте определимся, что мы будем писать. В итоге мы должны получить гостевую книгу со следующими свойствами:
* Посетитель обязательно должен ввести своё имя и сообщение, и по желанию свой e-mail и адрес домашней странички. * Разбиение на страницы. * Наша гостевая книга должна работать с register_globals = Off. * Все записи хранятся в обычном текстовом файле (т.е. нам не потребуется база данных). * Гостевая книга состоит из одного файла.
Примечание. Всё нижеследующее было протестировано на PHP 4.3.0.
С задачами вроде определились, теперь давайте разберёмся как у нас всё будет выгдядеть. Форма и записи будут выводится на одной странице. Наш файл будет называться gb.php. Напишем код формы. У меня получилось вот что:
<form action="gb.php" method="post"> <table width="500" cellpadding="2" cellspacing="0" style="border: 1px solid rgb(0, 75, 151);" bgcolor="#d7ecff"> <tbody><tr> <td align="right"> * Имя: </td> <td align="left"> <input type="text" name="msg_from" maxlength="40" size="30"> </td> </tr> <tr> <td align="right"> E-Mail: </td> <td align="left"> <input type="text" name="msg_mail" maxlength="40" size="30"> </td> </tr> <tr> <td align="right"> ** URL: </td> <td align="left"> <input type="text" name="msg_url" maxlength="40" size="30"> </td> </tr> <tr> <td align="right"> * Сообщение: </td> <td align="left"> <textarea cols="45" rows="7" name="msg_message"></textarea> </td> </tr> <tr> <td align="center" colspan="2"> <input type="submit" name="msg_submit" value="Добавить"> <input type="reset"> </td> </tr> <tr> <td align="center" colspan="2"> * Поля обязательные для заполнения<br> ** url вводить без http:// </td> </tr> </tbody></table> </form>
Теперь разберёмся с основными настройками нашей гостевой книги:
//---------- Настройки GB ----------// $file_gb = "c:/HTTP/CoderPRO/site/gb.dat"; // файл где хранятся записи GB $max_rec = 128; // максимальное количество записей в файле $rec_page = 6; // количество записей выводимых на одной странице //----------------------------------//
Напишем код заголовка нашей страницы:
<html><head> <title>..:: Гостевая книга ::..</title> <meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> <div align="center"><h1>Гостевая книга</h1></div>
Строчки с META нужны для того, чтобы наша страница не кэшировалась. Первая строчка говорит браузеру, что страницу кэшировать не надо, а вторая - если браузер не понимает первый параметр Pragma, что время хранения нашей страницы в кэше - 0 сек.
Теперь приступим собственно к программированию. Для начала напишем функцию проверки введённых данных:
// Проверка введённых данных // function test() { global $HTTP_POST_VARS;
if (!isset($HTTP_POST_VARS['msg_from'], $HTTP_POST_VARS['msg_mail'], $HTTP_POST_VARS['msg_url'], $HTTP_POST_VARS['msg_message'])) { echo "<p align="center">Ошибка при передачи параметров к скрипту! Обратитесь к администратору сайта.</p>n"; return(false); } if (trim($HTTP_POST_VARS['msg_from'])=="") { echo "<p align="center">Вы не ввели своё имя. Повторите ввод.</p>n"; return(false); } if (trim($HTTP_POST_VARS['msg_message'])=="") { echo "<p align="center">Вы не ввели сообщение. Повторите ввод.</p>n"; return(false); } return(true); } // test()
$HTTP_POST_VARS - это массив содержащий все ключи и значения переданные методом POST (работает при register_globals = Off). Сначала в функции проверяется всё ли было передано, а затем были ли заполнены обязательные поля Имя и Сообщение. Конечно, можно ещё сделать проверку на корректность введённого e-mail и url и много чего ещё, но это уже если вам хочется, то делайте сами, а мы не будем на этом заморачиваться и пойдём дальше.
Рассмотрим как у нас будут хранится записи в файле. В одной строке файла - одна запись в следующем формате:
Имя|E-Mail|URL|Дата и время добавления|Сообщение
Перед добавлением записи мы должны немного подредактировать данные. Как можно заметить, для разделения частей записи мы используем знак |, значит наши данные не должны содержать этот знак - мы заменим его на аналог в html-коде: ¦. Далее мы должны проверить длину сообщения, и если она больше некоторой величины (например более 1000 символов), то обрезать сообщение до нужной длины. Затем конвертируем все специальные символы в мнемоники HTML (функция htmlspecialchars). И наконец, заменим все переносы строк в сообщении на <br> и отформатируем данные в нужном нам формате для записи в файл. Конечно и здесь можно сделать ещё кучу всяких прибамбасов, но это мы оставим для самостоятельный работы и будем делать нашу гостевуху дальше. Итак строку для записи в файл мы сформировали и теперь её надо добавить в файл, при этом не привысив лимит количества записей в файле (вспомните настройки нашей страницы: $max_rec = 128;). Что-то я много пишу,а кода не видно: Вот вам наша функция добавления записи в файл:
// Функция добавления записи // function add() { global $max_rec; global $file_gb; global $HTTP_POST_VARS;
$recs = @file($file_gb) or $recs = array();
$from = $HTTP_POST_VARS['msg_from']; $mail = $HTTP_POST_VARS['msg_mail']; $url = $HTTP_POST_VARS['msg_url']; $message = $HTTP_POST_VARS['msg_message'];
$from = str_replace ("|", "¦", $from); $mail = str_replace ("|","¦",$mail); $url = str_replace ("|","¦",$url); if (strlen($message)>1000) $message=substr($message,0,1000); $message = htmlspecialchars($message, ENT_QUOTES); $message = str_replace("|","¦",$message); $message = trim($message); $message = ereg_replace (" ", "<br>", $message);
array_unshift ($recs,"$from|$mail|$url|".date("d M Y, H:i")."|$messagen"); if (count($recs)>$max_rec) $recs=array_slice($recs,0,$max_rec); $count = count($recs); $f = fopen ($file_gb, "w"); for ($i=0; $i<$count; $i++) { fwrite($f,$recs[$i]); } fclose($f); } // add()
|