Если вы не были в гостевой книге какого-либо сайта, считайте, что вы не были на этом сайте вообще. Не мечтали ли вы каждое утро перед выходом в школу/университет/на работу, проверяя свой e-mail, обнаруживать новое доброжелательное сообщение в гостевухе? Если да, то эта статья именно для вас.

Для тех, кто не знает, что такое гостевая книга. Сомневаюсь, что такие есть, но все же. Гостевая книга — это страница вашего сайта, где ваши посетители будут сообщать свое мнение о сайте, о размещенной на нем информации, о том, что «здеся был Жёрик» и другие приятные вещицы. Созданием такой страницы мы сегодня и займемся. Многие скажут, что в Интернете много сервисов, где есть уже готовые скрипты гостевых книг, достаточно только зарегистрироваться и поставить на сайте ссылку. Но ведь гораздо приятнее, когда посетители похвалят вас за то, что вы умеете делать такие замечательные гостевушки, а то и автограф ненароком попросят :-).

Писать мы будем на PHP, так как на данный момент, по мнению сотен тысяч людей, он является наиболее перспективным языком программирования для Интернета. Сначала разберем процесс добавления и чтения сообщений. Пользователь переходит на страницу, где отображены уже оставленные записи, и если захочет добавить свою запись, переходит по ссылке на другую страницу или на позицию текущего документа, откуда можно добавить сообщение. По-моему, последний вариант — самый удобный. Во-первых, экономит время, а время — это деньги, а во-вторых, не загрязняет кэш компьютера пользователя.

Для реализации этого плана создайте 3 файла: index.php, guest.dat и add.php. Файл index.php будет отображать созданные сообщения и содержать форму для добавления новой записи. Файл guest.dat — для хранения записей. Каждая строка в этом файле будет соответствовать одной записи. А файл add.php будет добавлять запись, отсылать уведомление о новой записи вам на e-mail и переадресовывать браузер обратно на index.php. Дизайн гостевой книги тоже вещь немаловажная, но я думаю, с этим вы разберетесь и сами.

Логичнее сначала заняться index.php. Открываем его в любимом текстовом редакторе и прописываем:

<center><font color="#0000A0"><b>Гостевая книга</b></font></center> <font color="#c0c0c0"><b>Всего записей: $count</b></font><br><a href="#add" class="txt">Добавить</a>"; for ($i=count($all)-1;$i&gt;=0;$i--) { if ($all[$i]!="") echo "$all[$i]<hr width="75%" color="#c0c0c0">"; } ?&gt; <a name="add"></a> <center><font color="#FFFFFF"><b>Добавить</b></font></center> <form action="add.php"> <table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td><font color="#000000"><b>Ваше имя:</b></font></td><td><input type="text" size="30"></td></tr> <tr><td><font color="#000000"><b>E-Mail:</b></font></td><td><input type="text" size="30" name="email"></td></tr> <tr><td><font color="#000000"><b>Сайт:</b></font></td><td><input type="text" size="30" name="hp"></td></tr> <tr> <td colspan="2"><font color="#000000"><b>Сообщение:</b></font><br> <textarea name="message" rows="6" cols="42"></textarea> </td> </tr> <tr><td><input type="submit" value="Оставить"><input type="reset" value="Очистить"></td></tr> </tbody></table> </form>

Разберем строки, которые могут вызвать у вас затруднения. Строка $all=file("guest.dat"); загружает в массив $all построчно содержание нашего guest.dat. Функция File практически полностью заменяет сочетание fopen(), fget() и fclose() — она делает то же самое, но данные выдает в виде массива. Затем строкой $count=count($all); мы создаем переменную $count и придаем ей значение, обозначающее количество записей. Напомню, что каждая строка документа guest.dat является отдельной записью. Затем строками

for ($i=count($all)-1;$i&gt;=0;$i--) { if ($all[$i]!="") echo "$all[$i]<hr width="75%" color="#c0c0c0">"; }

мы выводим содержание этого массива в браузер. Обратите внимание, мы создаем не простой цикл, а обратный, чтобы самая последняя запись отображалась сверху. Затем идет чистый HTML. Мы создаем якорь add, чтобы пользователь с начала страницы, кликнув по ссылке Добавить, мог сразу перейти к добавлению записи, а потом создаем форму с текстовыми полями и двумя кнопками. Поле с именем name передает имя посетителя, поле email — адрес электронной почты, hp — домашнюю страницу, а message, соответственно, текст сообщения. Здесь, вроде бы, все понятно. Теперь перейдем к add.php, на который и отправляется форма, после заполнения и нажатия кнопки Добавить. Здесь начинается самое интересное:

","&gt;",$message); $name = strip_tags($name); $email= strip_tags($email); $name = StripSlashes($name); $message = stripslashes($message); $message = ereg_replace("(\r\n|\n|\r)", "<br>",$message); $fp=fopen("guest.dat","a"); $text=""; $text=$text.$tmp; } else { $tmp=""; $text=$text.$tmp; } if ($hp="") { $text=$text."";} $text=$text."<table><tbody><tr><td><font color="#000000"><b>Имя</b></font>: $name"; if ($email!="") { $tmp="(<a href="mailto:$email" class="txt">$email</a>)</td></tr><tr><td><font color="#000000"><b>Сайт:</b></font> <a href="$hp" class="txt">$hp</a></td></tr><tr><td><font color="#000000"><b>Сообщение:</b></font><br>$message</td></tr></tbody></table>\n"; fwrite($fp,$text); fclose($fp); $dateadded=date('yyyy.mm.dd hh:mm:ss'); Header("Location: index.php"); mail("switch@mail.zp.ua", "Сообщение в отзывах", "От: $name($email) \n Web: $hp \n $message Дата: $dateadded \n IP: $REMOTE_ADDR"); ?&gt;

Первыми семью строками мы форматируем содержания переменных таким образом, чтобы они правильно отображались у нас на странице. Первые две строки удаляют из текста сообщения HTML-тэги. Точнее, не удаляют, а заменяют значки < и > специальными символами-кодами: < и >. Затем идут махинации с именем и e-mail'ом посетителя. Вот из этих переменных уже полностью удаляются HTML-тэги. Строками $name = StripSlashes($name); $message = stripslashes($message); мы заменяем все BackSlash’ы \ на простые /. Строка $message = ereg_replace("(\r\n|\n|\r)", "
",$message) ищет в тексте сообщения, переносы строк и заменяет их HTML-тэгом
. Если этого не сделать, одно сообщение при записи в файл займет несколько строк, поэтому при чтении сообщений оно будет неправильно отображаться. Затем, открывается для записи файл guest.dat, проверяются переменные, хранящие значения E-mail'а и сайта посетителя, и формируется единая строка $text, которая и будет добавлена в файл guest.dat. Так что если у посетителя нет e-mail'а или сайта, эти поля не будут сохраняться вообще, чтобы не показывать пустые ссылки. Потом идет запись в файл — как мы уже договорились, в guest.dat. Теперь, чтобы вы не лазили всякий раз к себе на сайт и не проверяли таким образом гостевую на наличие новых сообщений мы сделаем так, чтобы скрипт отсылал вам это радостное известие прямо на e-mail. Отправку писем на e-mail вам поможет организовать функция Mail. Выглядит она таким образом:

bool mail(string to, string subject, string message, string additional_headers);

Параметр to указывает адрес e-mail, на который будет отправлено письмо, subject указывает тему письма, message содержит текст письма. Параметр additional_headers поможет вам добавить еще что-нибудь к заголовку письма, например, можно сразу указать, кем было добавлено сообщение. Мы этот параметр опускаем, потому что он нам не нужен. В нашем скрипте в тексте письма указывается имя, введенное посетителем, адрес его сайта, электронная почта, дата добавления записи и IP-адрес. Спешу вас предупредить: если вы пользуетесь бесплатным хостингом, по умолчанию функция mail может быть недоступна. Для того чтобы ее активизировали, вам нужно связаться с администрацией и обговорить возможность ее активации. Такой уж он, бесплатный сыр :-). Последняя неразобранная строка —Header("Location: index.php");. Она переадресовывает браузер на страницу отображения всех записей —index.php. Вместо index.php может быть указан путь к любому документу, причем не только к локальному файлу. Вот и все! Если будут вопросы — пишите на switch@mail.zp.ua. До следующих встреч на страницах МК!