- Евгений ГРИВАСТОВ (tw@tv-gent.net)
Делаем гостевую книгу.
Гостевая книга является одним из
средств общения посетителей между собой
и обратной связи с автором сайта. Для
начала мы создадим простейшую гостевую
книгу. Потом размножим их и добавим
возможность управления ими.
Простейшая гостевая книга.
Что такое гостевая книга по своей сути?
Это веб-страница, на которой посетители
могут оставлять свои записи. Значит, в
составе HTML-страницы гостевой книги
надо предусмотреть место для собственно
сообщений и форму ввода новых сообщений.
Создайте файл с расширением *.html (например,
myfirstgb.html) со следующим содержанием:
<html>
<head>
</head>
<body>
<p><b>Моя
гостевая книга</b></p>
<!--
new message -->
<form
action="http://your_domen.com/cgi-bin/guestbook.cgi"
method="post">
Ник:
<input type="text" name="nik" size="20"><br>
E-mail:
<input type="text" name="email" size="20"><br>
Сообщение: <input type="text" name="message"
size="20"><br>
<input
type="submit" value="Записать">
</form>
</body>
</html>
Еще давайте создадим на
сервере директорию, например, "gb",
и поместим в нее этот файл. Файл
заливайте на сайт в режиме ASCII и
после заливки присвойте ему права
доступа 666. Это и будет собственно
файл гостевой книги. Теперь создадим
скрипт, который необходимо сохранить в
директории CGI-BIN сервера, можно для
этого создать там дополнительную папку GBOOK.
На всякий случай напомню, что заливать
файл скрипта на сервер необходимо в
режиме ASCII, а затем присвоить ему права
доступа 755.
Чтобы не повторять код два раза, я просто
буду комментировать строки скрипта. В Perl
строка, начинающаяся с символа "#",
является комментарием и не
воспринимается интерпретатором (кроме
первой строки скрипта, мы об этом уже
писали). Поэтому вы можете набирать
скрипт со всеми комментариями - так он
будет понятней для последующей работы.
#!/usr/bin/perl
# В
следующей строке мы задаем полный путь
на файл myfirstgb.html
$gbfile="/home2/your_domen/public_html/gb/myfirstgb.html";
#
Преобразуем данные, полученные от формы,
в нормальный вид и поместим в хэш %field
# Я уже
писал, что эта подпрограмма будет
#одинаковая для всех создаваемых
нами скриптов
# Именно в
таком виде она генерится Perl Builder.
#Не
рекомендую в ней что либо менять.
&GetFormInput;
# Присвоим
данные полей html-формы переменным $nik, $email
и $message
$nik=$field{"nik"};
$email=$field{"email"};
$message=$field{"message"};
# Откроем
файл гостевой книги для чтения и
записи
open (GBFILE,
"+<$gbfile");
#
Заблокируем доступ из других копий
этого скрипта
flock
(GBFILE,2);
# Поместим
все содержимое файла в массив @gb
@gb =<GBFILE>;
#
Переместим указатель позиции в файле на
его начало
seek
(GBFILE,0,0);
# Усечем
файл по указатель позиции (т.е. в нашем
случае - очистим)
truncate(GBFILE,0);
# У всех
строк, содержащихся в массиве @gb, удалим
символ конца строки
(если
таковой имеется)
chomp (@gb);
#
Перебираем в цикле все записи,
содержащиеся в массиве @gb,
#присваивая их значение переменной
$stroka
foreach $stroka (@gb)
{
# Запишем
строку обратно в файл
print GBFILE "$stroka";
# Если
найдем строку "<!-- new message -->", то
после нее добавим
новую
запись
if ($stroka eq
'<!-- new message -->') {
print GBFILE '<p><b>Ник:
'.$nik.' </b><br>';
print GBFILE 'E-mail:
'.$email.'<br>';
print GBFILE 'Сообщение:
'.$message.'<hr></p>';
}
}
# Закроем
файл, сняв с него блокировку
close(GBFILE);
#
Перенаправим браузер на
отредактированный файл нашей гостевой
книги.
#
Пропишите здесь правильный полный URL
файла гостевой книги на вашем
сайте.
print "Location:
http://www.your_domen.com/gb/myfirstgb.html\n\n";
# Завершим
работу скрипта. Это необязательно, но
лучше не привыкать
к
небрежности... ;-)
exit;
Подпрограмма,
разбирающая полученные от формы данные
и помещающая их в хэш %field, выглядит таким
образом:
sub GetFormInput {
(*fval) = @_ if @_ ;
local ($buf);
if ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN,$buf,$ENV{'CONTENT_LENGTH'});
}
else {
$buf=$ENV{'QUERY_STRING'};
}
if ($buf eq "") {
return 0 ;
}
else {
@fval=split(/&/,$buf);
foreach $i (0 .. $#fval){
($name,$val)=split (/=/,$fval[$i],2);
$val=~tr/+/ /;
$val=~ s/%(..)/pack("c",hex($1))/ge;
$name=~tr/+/ /;
$name=~ s/%(..)/pack("c",hex($1))/ge;
if (!defined($field{$name})) {
$field{$name}=$val;
}
else {
$field{$name} .= ",$val";
}
}
}
return 1;
}
Все, что касается тэгов HTML, я объяснять
не буду.
Итак, наша гостевая книга может
принимать новые записи. Но в таком виде
страница гостевой книги будет постоянно
увеличиваться в размере, что неудобно,
так как когда ее размер перевалит за
первую сотню килобайт, пользоваться ей
будет несколько затруднительно :-). В
следующий раз мы научим нашу гостевую
книгу хранить сообщения в отдельном
файле, выдавать их для просмотра
пакетами - например, по двадцать штук.
Далее добавим возможность модерации (удаления
некоторых сообщений владельцем книги, т.
е. вами). Рассмотрим отличие гостевой
книги от конференции и преобразуем нашу
гостевую книгу в простейшую конференцию.
(...продолжение следует...)
Источник: http://www.mycomp.com.ua/
|