IZONE - http://www.izcity.com/ - бесплатный софт, вэб-сервисы, ресурсы для раскрутки, свежие номера журнала "Internet Zone".

 IZONE 


Perl для веб-мастера-3

Евгений ГРИВАСТОВ (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/

 


Copyright © "Internet Zone"info@izcity.com
Копирование и использование данных материалов разрешается только в случае указания на журнал "Internet Zone", как на источник получения информации. При этом во всех ссылках обязательно явное указание адреса вэб-сайта http://www.izcity.com/. При наличии у копируемого материала авторов и источника информации - их также нужно указывать, наряду со ссылкой на нас.