Главная
домен в подарок! подробнее

каталог сайтов www.poiu.ru закрыт. копия сайта www.myphp.net.ru сделана мной без согласия автора, подробнее тут


Уроки PHP.

Урок 7. Добро пожаловать, или пишем Гостевую книгу.

Итак, мы добрались до чего-то серьезного. Если раньше мы занимались больше "отстраненными" делами, то сегодня мы будем решать реальную задачу, с которой может столкнутся практический любой вебмастер, - написание собственной гостевой книги.

Конечно, можно использовать "гостевые" специализированных серверов, например, какой-нибудь http://guestbook.land.ru/, и лицезреть каждый раз их баннеры; или же взять готовые скрипты, допустим, с CGI.ru, но это тоже не так интересно, потому что автор скрипта писал гостевую книгу не для вашего сайта, а следовательно, такая "гостевуха" может нарушить общую концепцию вашего обожаемого детища.

Ну, думаю, я вас убедил, что "своя рубашка ближе к телу", так что приступим.

Итак, с чего начинается любая программа? Правильно, с постановки задачи. Так, наша гостевая книга прежде всего должна делать следующее:

  1. Сохранять добавленное сообщение.

  2. Производить проверку добавляемого сообщения перед сохранением (в целях безопасности).

  3. Выводить все сообщения на экран.

Это общие формулировки задач, к которым по мере написания кода будут добавляться новые.

Теперь, что нам понадобится? Как вы понимаете, серьезные вещи не пишутся в одном файле. Так что создадим в одной папке следующие файлы:

  1. config.php - здесь будут храниться общие настройки гостевой книги.

  2. base.txt - файл, где будут храниться все сообщения, наша своеобразная база данных.

  3. guest.php - здесь будет содержаться непосредственно наш скрипт.

Все, приготовления на этом окончены и пора переходить к сути дела.

Начинаем писать файл guest.php. Сразу хочу сказать, что практически все действия мы будет записывать в функциях, которые мы изучили на уроке 4. Поверьте, это очень удобно.

Прежде всего сделаем HTML шапку, которая будет выводиться независимо от того, какие действия мы совершаем.

<HTML>
<HEAD>
<TITLE>Гостевая книга</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
</HEAD>
<BODY>
<?
require("config.php"); 

Далее пишем функцию, которая будет выводить форму для добавления сообщения. Она основана на HTML. Код становится более "размашистым", поэтому дальнейшее использование таблиц для его отображения становится невозможным, так что я перехожу к <TextArea>.

Ну, я думаю, здесь все понятно: мы прерываем PHP код и пишем HTML, хотя эта часть по-прежнему относится к функции. Свойство action тега Form равно пустой строке, то есть обработчик формы находится в этом же файле. Уже при написании формы мы думаем о защите скрипта и ограничиваем количество вводимых символов свойством maxlength.

Итак, пользователь ввел сообщение и нажал на кнопку "Послать". Что же далее? Понятно, что нам нужно теперь сохранить это сообщение, чем сейчас и займемся.

Напишем в файле config.php следующие строки:

<?
$base = "base.txt";

Вместо base.txt вы можете использовать любой другой файл, но я буду называть этот файл именно так.

Теперь название файла-базы занесено в переменную, что значительно облегчит нам жизнь, если мы пожелаем использовать другой файл-базу.

Возвращаемся обратно к нашему основному файлу и пишем в нем следующее:

Ну, это, наверное, тоже несложно. Мы объявляем наши переменные как глобальные, то есть именно те, которые пользователь послал из формы. Далее мы присваиваем переменной $date текущую дату в виде день.месяц.год - часы:минуты:секунды (о функции date() читайте в статье Функция date() - вывод даты и времени в PHP). 

Затем имя отправившего сообщения, его адрес и само сообщение присваиваем переменной $text, причем разделяем их знаком ^^, который мы будем использовать для обратного процесса - из строки получать имя, адрес и сообщение. Для этого можно использовать любой символ или сочетание символов, которые не используются на письме, но я выбрал именно ^^.

Далее открываем файл-базу для дозаписи и приписываем в конце файла полученную строку из всех данных.

Итак, что мы имеем? Мы имеем форму для ввода сообщения и функцию для его сохранения. А теперь напишем функцию вывода сообщений.

Договоримся, что сообщения у нас будут выводиться в порядке убывания даты и времени их написания. Кроме того, ограничим число выводимых сообщений определенным числом, указанным в файле config.php, куда и добавляем строку:

$MessOnScreen = 10;

Вы можете установить здесь любое число.

Возвращаемся к guest.php и пишем довольно объемную функцию:

Функцией file() мы получаем массив, где в каждом элементе содержится строка с одним "блоком" - именем писавшего, адресом и его сообщением соответственно. Потом мы "переворачиваем" полученный массив, изменяем порядок элементов на обратный, так что самая последняя запись становится у нас первым элементом массива. Далее мы сравниваем количество элементов в $file (а значит и количество сообщений) с указанным в $MessOnScreen лимитом, и если оно меньше этого значения, то $MessOnScreen устанавливаем в число элементов $file.

Далее выполняется цикл вывода сообщений. С каждым проходом цикла значение переменной цикла увеличивается на единицу. Таким образом самые свежие сообщения (те, что были приписаны позже всех и находятся внизу файла-базы) выведутся первыми, а более старые - последними.

После этого переменной $mess присваиваем массив с элементами:
0-ой элемент - имя
1-ый элемент - адрес электронной почты
2-ой элемент - время добавления сообщения
3-й элемент - само сообщение

Это делается с помощью функции explode(), которая разбивает строку по символам ^^ (помните, говорили об этом выше).

Затем мы выводим в таблице все полученные значения. Если не встречались, то запись <?=$mess[2];?> эквивалентна <? echo $mess[2];?>

На сегодня все, продолжим на следующем уроке.

Назад, на урок 6

Дальше, на урок 8