Если вы не были в гостевой книге какого-либо сайта, считайте, что вы не были на этом сайте вообще. Не мечтали ли вы каждое утро перед выходом в школу/университет/на работу, проверяя свой 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> <? $all=file("guest.dat"); $count=count($all); echo"<center><font color=#c0c0c0><B>Всего записей: $count</B></FONT><br><a href='#add' class=txt>Добавить</a></center>"; for ($i=count($all)-1;$i>=0;$i--) { if ($all[$i]!="") echo "$all[$i]<hr width=75% color=#c0c0c0>"; } ?> <a name="add"></a> <center><font color=#FFFFFF><B>Добавить</B></FONT></center> <FORM action=add.php> <TABLE border=0 cellpadding=0 cellspacing=0> <TR><TD><FONT COLOR=#000000><B>Ваше имя:</B></FONT></TD><TD><input type="text" size=30 name="name"></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> </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>=0;$i--) { if ($all[$i]!="") echo "$all[$i]<hr width=75% color=#c0c0c0>"; }
мы выводим содержание этого массива в браузер. Обратите внимание, мы создаем не простой цикл, а обратный, чтобы самая последняя запись отображалась сверху. Затем идет чистый HTML. Мы создаем якорь add, чтобы пользователь с начала страницы, кликнув по ссылке Добавить, мог сразу перейти к добавлению записи, а потом создаем форму с текстовыми полями и двумя кнопками. Поле с именем name передает имя посетителя, поле email — адрес электронной почты, hp — домашнюю страницу, а message, соответственно, текст сообщения. Здесь, вроде бы, все понятно. Теперь перейдем к add.php, на который и отправляется форма, после заполнения и нажатия кнопки Добавить. Здесь начинается самое интересное:
<? $message = ereg_replace("<","<",$message); $message = ereg_replace(">",">",$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="<TABLE><TR><TD><FONT COLOR=#000000><B>Имя</B></FONT>: $name"; if ($email!="") { $tmp="(<a href='mailto:$email' class=txt>$email</a>)</TD></TR>"; $text=$text.$tmp; } else { $tmp="</TD></TR>"; $text=$text.$tmp; } if ($hp="") { $text=$text."<TR><TD><FONT COLOR=#000000><B>Сайт:</B></FONT> <a href='$hp' class=txt>$hp</a></td></tr>";} $text=$text."<TR><TD><Font color=#000000><B>Сообщение:</B></FONT><br>$message</TD></TR></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"); ?>
Первыми семью строками мы форматируем содержания переменных таким образом, чтобы они правильно отображались у нас на странице. Первые две строки удаляют из текста сообщения 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. До следующих встреч на страницах МК!
