Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Лабораторная работа №3 (CGI)




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

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

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

Нижеследующую гостевую книгу можно использовать автономно, используя шаблоны.

Основные части создаваемой гостевой книги:

· 1. форма для добавления сообщения в Книгу. Включает поля ИМЯ, E-MAIL, СООБЩЕНИЕ и др.

· 2. страница, выводящая ошибку ввода данных.

· 3. страница с подтверждением добавления сообщения в Книгу.

· 4. страница, формирующая собственно Книгу. Здесь программа должна быть как можно гибче к формированию вывода отдельной записи Книги.

Параметры конфигурации программы:

$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-код для этой записи.

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...