include("compteur.php"); ?>
Добро пожаловать, или пишем Гостевую книгу.Итак, мы добрались до чего-то серьезного. Если раньше мы занимались больше "отстраненными" делами, то сегодня мы будем решать реальную задачу, с которой может столкнутся практический любой вебмастер, - написание собственной гостевой книги. Конечно, можно использовать "гостевые" специализированных серверов, например, какой-нибудь http://guestbook.land.ru/, и лицезреть каждый раз их баннеры; или же взять готовые скрипты, допустим, с CGI.ru, но это тоже не так интересно, потому что автор скрипта писал гостевую книгу не для вашего сайта, а следовательно, такая "гостевуха" может нарушить общую концепцию вашего обожаемого детища. Ну, думаю, я вас убедил, что "своя рубашка ближе к телу", так что приступим. Итак, с чего начинается любая программа? Правильно, с постановки задачи. Так, наша гостевая книга прежде всего должна делать следующее:
Это общие формулировки задач, к которым по мере написания кода будут добавляться новые. Теперь, что нам понадобится? Как вы понимаете, серьезные вещи не пишутся в одном файле. Так что создадим в одной папке следующие файлы:
Все, приготовления на этом окончены и пора переходить к сути дела. Начинаем писать файл guest.php. Сразу хочу сказать, что практически все действия мы будет записывать в функциях, которые мы изучили на уроке 4. Поверьте, это очень удобно. Прежде всего сделаем HTML шапку, которая будет выводиться независимо от того, какие действия мы совершаем.
Далее пишем функцию, которая будет выводить форму для добавления сообщения. Она основана на 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 присваиваем массив с элементами: Это делается с помощью функции explode(), которая разбивает строку по символам ^^ (помните, говорили об этом выше). Затем мы выводим в таблице все полученные значения. Если не встречались, то запись <?=$mess[2];?> эквивалентна <? echo $mess[2];?> На сегодня все, продолжим на следующем уроке. |