Библиотека Интернет Индустрии I2R.ru |
|||
|
Гостевая книга на PHPАвтор: Дмитрий Содержание
В этой статье я хочу рассказать Вам, как написать самую простую гостевую книгу. Конечно, по функциям она будет далека от совершенства, зато полностью работоспособна и представляет большой простор для творчества. Взяв за основу этот скрипт, Вы сможете практически бесконечно добавлять в него свои функции (например, систему администрирования), менять дизайн любых частей (верхушки и низа страниц, форм, дизайн сообщений). Некоторые идеи по ее модификации я упомяну в конце этой статьи. Зачем может понадобиться гостевая книга Вашему сайту? С ее помощью можно наладить обратную связь с посетителями, выслушать их комментарии по поводу сайта, дать возможность Вашей аудитории поделиться мнениями. Это очень важно, так как действительно позволяет сделать сайт лучше и максимально приблизить его к пользователю. В сети существует множество скриптов гостевых книг. Однако каждый, кто обладает начальными знаниями в PHP, может написать свою гостевую книгу. Зачем? Все очень просто. Написав свой скрипт, Вы можете сделать его исходя из конкретных потребностей Вашего сайта. Обычно в чужих гостевых книгах либо сложно настраивается дизайн, либо сложно управлять ими, либо Вы обязаны сохранять чужие копирайты. Все эти моменты отпадают, когда Вы создаете свой скрипт. Кроме того, немаловажный момент - написание свой гостевой книги позволяет нелишний раз попрактиковаться в программировании :). Также хочу сказать, что я буду очень рад, если Вы поделитесь своим мнением о статье и выразите комментарии по поводу ее содержания. Если Вам есть что сказать - просьба оставить Ваш комментарий о статье на форуме вебмастеров WebTalk.ru. Там же Вы можете задать любой вопрос, и не только по этой статье, но и по множеству других тем. Ну и, конечно, познакомиться и пообщаться с единомышленниками. Взять готовый и полностью работоспособный скрипт гостевой книги можно там же на сайте.
Оригинал этой статьи, комментарии, мнения и исходники находятся по адресу: Статья будет расширяться, пополняться новой информацией и, возможно, апдейтами. Поэтому советую посетить эту страницу чтобы получить самую последнюю информацию. На форуме также есть рассылка "PHP для начинающих", в которой очень много важной информации для новичков. Если Вам что-то непонятно в этой статье, то Вам обязательно нужно ознакомиться с этой рассылкой. Выпуски выходят регулярно и содержат массу полезной обучающей информации. Чтобы понять информацию в этой статье, Вам потребуются самые начальные знания по PHP. Если Вы хотите протестировать этот пример на домашнем компьютере, Вам нужно установить и настроить на домашнем компьютере вебсервер Apache и язык программирования PHP. Для этого я очень рекомендую прочитать мою статью Вебсервер в домашних условиях, в которой подробно и по шагам описывается процесс установки и настройки домашнего вебсервера. Выполнив описанные действия вы получите полноценный работающий сервер с полным набором возможностей и сможете тестировать скрипты в домашних условиях. Чтобы запустить гостевую книгу на сайте, Вам понадобиться хостинг с поддержкой PHP. Я рекомендую Вам хостинг-провайдера RunWeb.Ru. У них поддержка PHP включена в любом, даже самом бюджетном тарифном плане, а служба поддержки всегда поможет, ответит на любой вопрос и решит любую проблему - проверено. Структура программыИтак, давайте посмотрим, как будет выглядеть наша гостевая книга. Гостевая книга состоит их нескольких файлов. Каждый выполняет свои действия, предназначенные только ему. Сразу определимся со структурой программы. Подразумевается, что файлы гостевой книги размещаются в отдельном каталоге. Я рекомендую Вам выделить для тестирования скрипта отдельный хост в Вашем Apache (если Вы прочитали статью про установку Apache, то Вам не составит труда сделать это). Давайте теперь рассмотрим структуру файлов подробно:
Каталог данныхОтдельно расскажу про файлы в каталоге data. Файлы header.php и footer.php задают общий дизайн страниц гостевой книги. Как минимум они должны содержать обязательные тэги html-документа. Рассмотрим структуру html документа: <html> <head> <title>Гостевая книга</title> </head> <body> <!-- данные гостевой книги --> </body> </html> Как видите, до комментария <!-- данные гостевой книги --> есть обязательные тэги. Это - верхушка документа и их нужно разместить в файле header.php. Все что ниже этого комментария - нужно разместить в файле footer.php. В нашем случае это всего две строчки закрывающие обязательные тэги </body> и </html>. Кроме того, обратите внимание, оба файла являются php скриптами, поэтому Вы можете использовать в них любые php-тэги. Файл data/guest.dat содержит данные гостевой книги. Эти данные выводятся файлом index.php, а добавляются в него файлом add.php (см. структуру программы выше). По умолчанию, когда сообщения отсутствуют, этот файл пустой. Чтобы не отвлекаться в дальнейшем, сразу сделайте каталог data и создайте в нем три файла. guest.php оставьте пустым, а в header.php и footer.php запишите html из примера, приведенного выше. Готово? Тогда продолжим. Файл настроек гостевой книгиФайл настроек в нашей гостевой книге - inc.php. В нем записываются имена файлов данных, описанных выше, а также некоторые другие переменные. Это сделано для того, чтобы при необходимости не редактировать все скрипты, изменяя пути или имена файлов, а просто изменить значения переменных в inc.php. Кстати, учитесь выносить такие переменные как пути к служебным файлам, формат дат или административный email в отдельные файлы настроек. Возьмите за правило называть его одинаково во всех Ваших программах. Это избавить Вас в дальнейшем от копания в исходных кодах да и просто является хорошим тоном в программировании. Вот код файла настроек: <? $header = "data/header.php"; $footer = "data/footer.php"; $data = "data/guest.dat"; $data_format = "d-m-y, H:i"; $admin_email = "admin@your_site.ru"; $notify = 1; ?> Переменные $header, $footer и $data, как Вы уже догадались, задают пути к уже известным нам файлам в каталоге "data". Переменная $data_format задает формат дат, которые указываются в заголовке сообщения (когда и во сколько оно было добавлено). В варианте "d-m-y H:i" это означает "день-месяц-год Часы-Минуты". Например, сообщение, добавленное 10 января 2004 года в 21:30 будет выглядеть как "01-01-04 21:30". Переменная $admin_email указывает Email администратора гостевой книги. Переменная $notify указывает нужно ли отправлять по адресу $admin_email уведомления о добавлении новых сообщений. Если установить $notify=0, уведомления отправляться не будут, если поставить $notify=1, то при добавлении сообщения в гостевую книгу администратору будет отправляться письмо. Как это работает - увидите дальше. Добавление сообщенийДобавление сообщения производит файл add.php. Это - практически самый важный файл в гостевой книге. Он осуществляет проверку формы сообщения, формирование и добавление его в базу данных, уведомление администратора и т.п. Рассмотрим его код: <? include "inc.php"; include $header; // функция show_form() выводит форму добавление сообщения, а // также сообщение об ошибке, если такая возникает Function show_form($s="") { global $name,$email,$url,$message,$footer; if ($s) echo "<b>Ошибка:</b> $s<hr>"; ?> <b>Добавление сообщения:</b><hr> <table width=80% cellpadding=3 cellspacing=3> <form action=add.php method="post"> <tr> <Td>Ваше имя: *</TD> <td><input type=text name=name size=20 value="<? echo $name; ?>"></td> </tr> <tr> <Td>Ваш Email:</TD> <td><input type=text name=email size=20 value="<? echo $email; ?>"></td> </tr> <tr> <Td>Адрес сайта:</TD> <td><input type=text name=url size=20 value="<? echo $url; ?>"></td> </tr> <tr> <Td colspan=2>Текст сообщения: *<br> <textarea cols=35 rows=5 name=message><? echo stripslashes($message); ?></textarea> </TD> </tr> <tr><td colspan=2><input type=submit value=" Добавить сообщение! "></td></tr> <input type=hidden name=a value=1> </form> </table> <p>Поля, отмеченные звездочкой (*) обязательны к заполнению. <? include $footer; exit(); } // проверка на существование файла с данными гостевой книги if (!file_exists($data)) { echo "Ошибка! Файл с данными отсутствует!"; include $footer; exit(); } // если сообщение еще не добавляется, выводим форму if (!$a) show_form(); // если сообщение добавляется, проверяем форму на ошибки if (!$name) show_form("Укажите Ваше имя!"); if (!$message) show_form("Вы не заполнили сообщение!"); // формируем сообщение if ($email) $name = "<a href=\"mailto:$email\">$name</a>"; if ($url) $name .= ", <a href=\"$url\">$url</a>"; $name .= ", ".date($data_format, time()); $message = str_replace("<","<",$message); $message = str_replace("\n","<br>",$message); $s = "<b>Добавлено: ".$name."</b><br>".$message."<p>"; // записываем его в файл $f = fopen($data, "a"); fputs($f, stripslashes($s)); fclose($f); // уведомление администратора о новом сообщении if ($notify) @mail($admin_email, "НОВОЕ СООБЩЕНИЕ", "В Гостевую книгу добавлено новое сообщение!", "From: $email"); echo "Сообщение успешно добавлено!<br>"; echo "<a href=\"index.php\">Вернуться в гостевую книгу</a>"; include $footer; ?> Теперь давайте рассмотрим работу этого скрипта: 1. Функция show_form() выводит html-форму добавления сообщения. Как Вы видите, ей передается необязательный параметр $s="", а также через раздел global все переменные формы. Эти переменные подставляются в поля формы при повторном ее вызове, чтобы пользователь не заполнял их повторно. Важный момент - форма содержит скрытое поле a (<input type=hidden name=a value=1>), которое передает переменную $a=1. Тут и скрыт алгоритм вызова формы. Работает он следующим образом:
2. Далее проверяется, заполнены ли обязательные поля $name и $message. Email и адрес сайта пользователь может не указывать - ведь сайта у посетителя может и не быть, а Email хотят указывать не все. Здесь и нужен необязательный параметр функции $s="". В случае, если какое-то из полей не заполнено, в нем передается сообщение об ошибке и форма вызывается снова. Как видите, в show_form() проверяется, заполнен ли этот параметр. Если он присутствует - то строка $s выводится на экран. 3. Следующий шаг - формирование сообщения. В первую очередь формируется заглавная строка путем преобразования переменной $name. Тут все просто: если пользователь указал Email, то его имя окружается тэгом <a href="mailo:указанный_email">Имя</a>. То же самое происходит с адресом сайта (переменная $url). После этого добавляется дата и в сообщении пользователя заменяются все тэги html, а также символы переноса строки на тэги <br>. 4. Теперь сообщение записывается в файл данных (data/guest.dat). Для этого файл открывается с параметром "a" (добавление в конец файла). 5. И последний важный шаг - отправка уведомления о новом сообщении администратору. Если задана переменная $notify, то с помощью функции mail() сообщение отправляется. На случай, если Вы не знакомы с функцией mail() объясню ее синтаксис. mail() принимает 4 параметра. Первый - это email, на который нужно отправлять сообщение. Второй - это тема письма, третий - текст сообщения, а четверый - дополнительные RFC заголовки. В них мы указываем параметр "From: ", то есть от кого пришло сообщение. В качестве "From: " указывается Email пользователя, добавившего сообщение. 6. Под конец выводится строка "Сообщение успешно добавлено!" и файл с нижней частью документа. Вывод сообщенийКак Вы помните из структуры программы, выводим сообщений занимается файл index.php. Рассмотрим его код: <? // подключаем файл с данными include "inc.php"; // выводим верхушку документа include $header; // проверка на существование файла с данными гостевой книги if (!file_exists($data)) { echo "Ошибка! Файл с данными отсутствует!"; include $footer; exit(); } // проверка количества сообщений. // если файл пустой - пишем, что сообщения отсутствуют. $f = file($data); if (!count($f)) { echo "Сообщения в гостевой книге отсутствуют.<br>". "<a href=\"add.php\">Добавить сообщение</a>"; include $footer; exit(); } // выводим все сообщения echo "<a href=\"add.php\">Добавить сообщение</a><hr>"; echo implode($f,""); echo "<hr><a href=\"add.php\">Добавить сообщение</a>"; include $footer; ?> Как видите, скрипт очень простой. Думаю, нет необходимости отдельно описывать его алгоритм, основная работа понятна из комментариев и объяснений к предыдущему скрипту. Задачи для самостоятельной работыВ качестве небольшой практики я хотел бы предложить Вам несколько идей по поводу расширения возможностей этого скрипта. Вот основные моменты, которые Вы можете выполнять самостоятельно:
Это основные идеи. Однако они (особенно модификация базы) являются основой скрипта уже совсем другого уровня :) Попробуйте сделать и, возможно, придумать что-то свое. Ведь после освоения новой информации главный шаг - ее закрепление. Только одна просьба - если Вы модифицируете скрипт, поделитесь своим творчеством с общественностью на форуме вебмастеров WebTalk.ru. Многие будут Вам благодарны! ЗаключениеКак видите, написать гостевую книгу совсем не сложно. Конечно, этот пример является лишь основой для настоящего скрипта, но вполне достаточен для новичка. Теперь Вы сами можете написать гостевую книгу. Если раньше для Вас это было проблема - считайте что Вы сделали большой шаг вперед :). Удачи Вам! И заходите на наш форум. С уважением, Дмитрий Оригинал статьи, комментарии, мнения и исходники: http://www.webtalk.ru/showthread.php?s=&threadid=35 Разрешено любое распространение при сохранении всех копирайтов. Статьи по теме: |
|
2000-2008 г. Все авторские права соблюдены. |
|