Яндекс цитирования
 

CGI/PERL : практика программирования

 

[ В начало раздела ]

Создание гостевой книги

Гостевые книги или “книги отзывов и предложений” стали неотъемлемой частью любого хорошего сайта. Ведь это – первый шаг к созданию обратной связи с посетителями сайта.

Гостевая книга – это программа, предоставляющая посетителю просмотреть отзывы других посетителей сайта, а также добавить свой отзыв или сообщение. В этой статье я расскажу, как создать хорошую гостевую книгу, которую можно использовать автономно, используя шаблоны. При небольшой доработке Вы сможете подключать ее, используя расширение SSI WEB-сервера.

Итак, начнем. Перечислим основные части гостевой Книги:

  • 1. форма для добавления сообщения в Книгу. Включает поля ИМЯ, E-MAIL, СООБЩЕНИЕ и др.
  • 2. страница, выводящая ошибку ввода данных.
  • 3. страница с подтверждением добавления сообщения в Книгу.
  • 4. страница, формирующая собственно Книгу. Здесь программа должна быть как можно гибче к формированию вывода отдельной записи Книги.

В создаваемой программе я воспользуюсь аналогами процедур, расписанных в книге “CGI/Perl Создание программ для Web” (К.Пэтчет, М.Райт):

  • 1) процедура обработки входных данных – parse_form;
  • 2) процедура обработки HTML-шаблонов – parse_template.
Процедура parse_template хороша тем, что Вы можете в программе создавать свои спец-теги и присваивать им свои значения, а процедура просматривая указанный HTML-шаблон, заменит спец-теги (формат <<спец-тег>>) на их значения.

Для начала я укажу параметры конфигурации программы.

$MY_DIR = "/home/dolgov/public_html/"; $ADD_HTML = $MY_DIR . "gbaddrec.htm"; # шаблон для благодарности за запись $BOOK_HTML = $MY_DIR . "gbbook.htm"; # шаблон для записей книги $ERROR_HTML = $MY_DIR . "gberror.htm"; # шаблон для ошибок ввода $BOOK_FILE = $MY_DIR . "/cgi-bin/book.txt"; # собственно книга

Следующий шаг (он же первый) – получение, разбор и анализ входных данных. В моей книге используются минимум анкетных данных – Имя посетителя, его e-mail, сообщение. Если в URL-скрипта содержит что-либо в строке запроса (query-string), то выполняется вывод записей в Книге ( н-р: http://…/cgi-bin/gbook.pl?records). Если обнаружены ошибки в входной информации, пользователю отсылается шаблон с сообщением о неправильно заполненной форме (указываются незаполненные поля).

#################################################################### # получаю список параметров из входного потока &parse_form; if (length($ENV{'QUERY_STRING'})) { $command = "BOOK"; } else { $username = $FORM{'name'}; $message = $FORM{'text'}; $email = $FORM{'email'}; # проверка на наличие ошибок ввода if(($username eq "")||($message eq "")) { $VAR{'error_fields'} .= "Имя посетителя<br>\n" if (!$username); $VAR{'error_fields'} .= "Текст сообщения<br>\n" if (!$message); $TEMPLATE_HTML = $ERROR_HTML; } else { $command = 'ADDRECORD'; } }

Теперь в зависимости от команды, выполняем программные действия. 1. Добавляем сообщение в Книгу (command = “ADDRECORD”) Для простоты фиксации времени добавления сообщения в Книгу, составим строковую переменную $mestime в формате DD.MM.YYYY HH:MM.

# работаю с текущей датой и временем ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year = 1900 + $year; $mon++; my $mestime = sprintf("%.2d.%.2d.%4d %.2d:%.2d", $mday,$mon,$year,$hour,$min);

 

Информационная запись в Книге будет представляться следующим образом
my $mes = sprintf("!R>>%s>>%s>>%s", $username, $mestime, $email);

Далее обработаем сообщение и заменим символ “перевод каретки” на символ “абзац”.

$message =~ s/\r+/\n/g;  # обработка текста (каретку -> абзац)
Ну и в завершении, запись в начало Книги нового сообщения.

# открываю книгу и списываю все данные open(GBOOK, $BOOK_FILE); @oldtext = <GBOOK>; close(GBOOK); # открываю книгу для записи open(GBOOK, ">".$BOOK_FILE); print GBOOK $message,"\n"; print GBOOK $mes,"\n"; # конец записи print GBOOK @oldtext; # добавляю все остальное в конец файла close(GBOOK);

Указываю HTML-шаблон, подлежащий обработке и выводу пользователю.
  $TEMPLATE_HTML = $ADD_HTML;

2. Просмотр записей в Книге. Здесь мы должны последовательно просматривать файл Книги и разделять отдельные сообщения.

# открываю файл книги open(GBOOK, $BOOK_FILE) || die "error open $BOOK_FILE"; while (<GBOOK>) { if ((/^!R>>/)&&($umes)) { ($temp,$username,$rectime,$dopinfo) = split(/>>/, $_); $VAR{'book_records'} .= &book_template($username,$rectime,$umes,$dopinfo); $umes = ""; $VAR{'num_records'}++; # веду счетчик записей } else { $umes .= $_; } } close(GBOOK);

$TEMPLATE_HTML = $BOOK_HTML;

При формировании отдельной записи в книге используется функция book_template. Эта функция получает на вход данные очередной записи и возвращает HTML-код для этой записи.

В заключении скажу, что этот скрипт используется и прошел проверку в Сети.

P.S. Все остальное смотрите в исходниках к статье.

© Долгов С.В. 12.07.00

 

[ В начало раздела ]


 

 

Все для web-дизана!!! Бард-Путеводитель Много Всего CGI-Гид. Лучшие скрипты... WDH - WebDesignHelp - CGI, JAVA, APPLETS, TOP100! Раскрутка, увеличение посещаемости и индекса цитируемости в поисковых системах.

© 2000-2002 Долгов Сергей

dolgov_sergei@mail.ru

X