Урок 7. Добро пожаловать, или пишем Гостевую книгу.
Итак, мы добрались до чего-то серьезного. Если раньше мы занимались больше
"отстраненными" делами, то сегодня мы будем решать реальную задачу, с которой
может столкнутся практический любой вебмастер, - написание собственной гостевой
книги.
Конечно, можно использовать "гостевые" специализированных серверов, например,
какой-нибудь http://guestbook.land.ru/,
и лицезреть каждый раз их баннеры; или же взять готовые скрипты, допустим, с CGI.ru, но это тоже не так интересно, потому что
автор скрипта писал гостевую книгу не для вашего сайта, а следовательно, такая
"гостевуха" может нарушить общую концепцию вашего обожаемого детища.
Ну, думаю, я вас убедил, что "своя рубашка ближе к телу", так что
приступим.
Итак, с чего начинается любая программа? Правильно, с постановки задачи. Так,
наша гостевая книга прежде всего должна делать следующее:
-
Сохранять добавленное сообщение.
-
Производить проверку добавляемого сообщения перед сохранением (в целях
безопасности).
-
Выводить все сообщения на экран.
Это общие формулировки задач, к которым по мере написания кода будут
добавляться новые.
Теперь, что нам понадобится? Как вы понимаете, серьезные вещи не пишутся в
одном файле. Так что создадим в одной папке следующие файлы:
-
config.php - здесь будут храниться общие настройки гостевой книги.
-
base.txt - файл, где будут храниться все сообщения, наша
своеобразная база данных.
-
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.txt вы можете использовать любой другой файл, но я буду
называть этот файл именно так.
Теперь название файла-базы занесено в переменную, что значительно облегчит
нам жизнь, если мы пожелаем использовать другой файл-базу.
Возвращаемся обратно к нашему основному файлу и пишем в нем следующее:
Ну, это, наверное, тоже несложно. Мы объявляем наши переменные как
глобальные, то есть именно те, которые пользователь послал из формы. Далее мы
присваиваем переменной $date текущую дату в виде день.месяц.год -
часы:минуты:секунды (о функции date() читайте в статье Функция date() - вывод
даты и времени в PHP).
Затем имя отправившего сообщения, его адрес и само сообщение присваиваем
переменной $text, причем разделяем их знаком ^^, который мы будем
использовать для обратного процесса - из строки получать имя, адрес и сообщение.
Для этого можно использовать любой символ или сочетание символов, которые не
используются на письме, но я выбрал именно ^^.
Далее открываем файл-базу для дозаписи и приписываем в конце файла полученную
строку из всех данных.
Итак, что мы имеем? Мы имеем форму для ввода сообщения и функцию для его
сохранения. А теперь напишем функцию вывода сообщений.
Договоримся, что сообщения у нас будут выводиться в порядке убывания даты и
времени их написания. Кроме того, ограничим число выводимых сообщений
определенным числом, указанным в файле config.php, куда и добавляем
строку:
Вы можете установить здесь любое число.
Возвращаемся к guest.php и пишем довольно объемную функцию:
Функцией file() мы получаем массив, где в каждом элементе содержится
строка с одним "блоком" - именем писавшего, адресом и его сообщением
соответственно. Потом мы "переворачиваем" полученный массив, изменяем порядок
элементов на обратный, так что самая последняя запись становится у нас первым
элементом массива. Далее мы сравниваем количество элементов в $file (а
значит и количество сообщений) с указанным в $MessOnScreen лимитом, и
если оно меньше этого значения, то $MessOnScreen устанавливаем в число
элементов $file.
Далее выполняется цикл вывода сообщений. С каждым проходом цикла значение
переменной цикла увеличивается на единицу. Таким образом самые свежие сообщения
(те, что были приписаны позже всех и находятся внизу файла-базы) выведутся
первыми, а более старые - последними.
После этого переменной $mess присваиваем массив с
элементами: 0-ой элемент - имя 1-ый элемент - адрес электронной
почты 2-ой элемент - время добавления сообщения 3-й элемент - само
сообщение
Это делается с помощью функции explode(), которая
разбивает строку по символам ^^ (помните, говорили об этом выше).
Затем мы выводим в таблице все полученные значения. Если не встречались, то
запись <?=$mess[2];?> эквивалентна <? echo
$mess[2];?>
На сегодня все, продолжим на следующем уроке.
|