Гостевая книга шаг за шагомВ этой статье мы научимся создавать гостевую книгу на PHP. И хотя эта статья написана для новичков, но Вы должны обладать хотя бы азами программирования на PHP.Итак, для начала давайте определимся, что мы будем писать. В итоге мы должны получить гостевую книгу со следующими свойствами: * Посетитель обязательно должен ввести своё имя и сообщение, и по желанию свой e-mail и адрес домашней странички. * Разбиение на страницы. * Наша гостевая книга должна работать с register_globals = Off. * Все записи хранятся в обычном текстовом файле (т.е. нам не потребуется база данных). * Гостевая книга состоит из одного файла. Примечание. Всё нижеследующее было протестировано на PHP 4.3.0. С задачами вроде определились, теперь давайте разберёмся как у нас всё будет выгдядеть. Форма и записи будут выводится на одной странице. Наш файл будет называться gb.php. Напишем код формы. У меня получилось вот что:
<form action="gb.php" method="post"> Теперь разберёмся с основными настройками нашей гостевой книги:
//---------- Настройки GB ----------// Напишем код заголовка нашей страницы:
<html><head> Строчки с META нужны для того, чтобы наша страница не кэшировалась. Первая строчка говорит браузеру, что страницу кэшировать не надо, а вторая - если браузер не понимает первый параметр Pragma, что время хранения нашей страницы в кэше - 0 сек. Теперь приступим собственно к программированию. Для начала напишем функцию проверки введённых данных:
// Проверка введённых данных // $HTTP_POST_VARS - это массив содержащий все ключи и значения переданные методом POST (работает при register_globals = Off). Сначала в функции проверяется всё ли было передано, а затем были ли заполнены обязательные поля Имя и Сообщение. Конечно, можно ещё сделать проверку на корректность введённого e-mail и url и много чего ещё, но это уже если вам хочется, то делайте сами, а мы не будем на этом заморачиваться и пойдём дальше. Рассмотрим как у нас будут хранится записи в файле. В одной строке файла - одна запись в следующем формате: Имя|E-Mail|URL|Дата и время добавления|Сообщение Перед добавлением записи мы должны немного подредактировать данные. Как можно заметить, для разделения частей записи мы используем знак |, значит наши данные не должны содержать этот знак - мы заменим его на аналог в html-коде: ¦. Далее мы должны проверить длину сообщения, и если она больше некоторой величины (например более 1000 символов), то обрезать сообщение до нужной длины. Затем конвертируем все специальные символы в мнемоники HTML (функция htmlspecialchars). И наконец, заменим все переносы строк в сообщении на <br> и отформатируем данные в нужном нам формате для записи в файл. Конечно и здесь можно сделать ещё кучу всяких прибамбасов, но это мы оставим для самостоятельный работы и будем делать нашу гостевуху дальше. Итак строку для записи в файл мы сформировали и теперь её надо добавить в файл, при этом не привысив лимит количества записей в файле (вспомните настройки нашей страницы: $max_rec = 128;). Что-то я много пишу,а кода не видно: Вот вам наша функция добавления записи в файл:
// Функция добавления записи // $recs - это массив с записями. Если файл $file_gb существует, то с помощью функции file() мы присваиваем каждую строчку файла одному элементу массива, в противном же случае $recs - пустой массив. Далее идёт редактирование данных описанных выше. Затем с помощью функции array_unshift() добавляем в начало записей нашу запись. Далее следует проверка на количество записей, и если количество больше нужного, то с помощью функции array_slice() мы выделяем первые элементы в нужном нам количестве. Ну и, наконец, записываем наши записи в файл. Итак, функции для добавления записей мы сделали, теперь нужно сделать функцию для постраничного вывода данных на экран. В принципе в выводе данных ничего сложного нет, считали запись - вывели в соответствии с дизайном и всё, но ведь мы хотим сделать вывод постраничным - вот в этом как раз и может возникнуть сложность. Итак приступим: Сначала я приведу код функции view(), а потом мы его разберём.
// Функция вывода записей // Глобальные переменные: $file_gb - файл с записями, $rec_page - количество записей выводимых на одну страницу - эти переменные мы определили в самом начале в настройках нашей гостевой книги. А вот $HTTP_GET_VARS - это массив содержащий все ключи и значения переданные методом GET, т.е. через URL (работает при register_globals = Off) - это нам понадобится, т.к. номер страницы мы будем передавать как раз через URL. Разберёмся, что же делает наша функция. Сначала выполняется проверка - есть ли файл с записями - и если есть, то выполняется работа по выводу записей, а если нет файла, то выводится сообщение, что записей нет. Итак, если всё нормально и у нас есть файл с записями, то с помощью функции file() мы создаём массив строк файла $messages, а переменной $count присваиваем кол-во элементов полученного массива, т.е. количества записей. Далее идёт выполняется вывод навигации страниц и сами записи в соответствии с нужной страницей. В частности мы используем функцию nav_page, я приведу лишь её код.
// Функция вывода навигации по страницам // Описывать я этот кусок не буду, вы можете прочитать об этом в моей статье постраничный вывод, где всё это подробно описано. Здесь я опишу только то, как мы выводим записи. Мы имеем цикл, в котором начальное и конечное значение $i - изменяется в зависимости от страницы, которую мы хотим отобразить. В цикле мы из элемента массива $messages[$i] создаём массив $tmp с помощью функции explode, которая разбивает строку на строки по границам образованными сепаратором |. Т.е. мы получаем массив в котором 0-й элемент - Имя, 1-й - e-mail, 2-й - url, 3-й - дата и время добавления, 4-й - само сообщение. Ну а дальше мы выводим нашу запись так как хотим. Вот мы и написали все необходимые функции для гостевой книги, осталось только написать код который будет выполняться в начале, т.е. будет выбирать, какую функцию запустить. Вот он:
if (isset($HTTP_POST_VARS['msg_submit'])) { if (test()) add(); } Думаю ничего сложного в нём нет и вы сами разберётесь что куда :) Всё! Мы написали всё, что нужно! Теперь соберите всё в кучу и получите полноценную гостевую книгу. Собирать в следующем порядке: 1)Заголовок файла, 2) Настройки GB, 3) Функции, 4) Нашу последнюю написанную строчку, 5) Форму для добавления, 6) колонтитул. Кому лень всё собирать - можете скачать уже готовый. См. файл gb.zip. Подведём итоги: Мы написали полноценную гостевую книгу и выполнили все задачи, которые поставили перед собой. Конечно можно сделать ещё кучу всяких фишек, написать администрирование гостевой книги и многое другое, но это уже тема другой статьи. В общем, надеюсь статья была вам полезна. Если что-то было не понятно, то милости прошу: пишите на мыло - обязательно отвечу. Автор: нет данных |