Смекни!
smekni.com

Практический Перл для начинающего (стр. 2 из 2)

alt="Книгажалоб" WIDTH="258" HEIGHT="60"></td>

</tr>

</table>

</div><div align="left">

<table border="0" width="630" height="53" cellspacing="0" cellpadding="0">

<tr>

<td width="200" height="260" valign="top"><p align="center">

HTML

DoInclude("D:/InetPub/wwwroot/_menu.htm");

print <<HTML;

</p>

<p align="left"></td>

<td width="10" height="53" valign="top"></td>

<td width="410" height="53" valign="top"><p align="left"><small>Вынеуказали

свое имя, E-mail, либо не заполнили сам текст Вашего

отзыва. Вернитесь, пожалуйста, на страницу формы

и заполните требуемые поля.</small></p>

<p align="center"><a href="add_guestbook.pl">Назад</a> </td>

</tr>

</table>

</div>

<table>

<tr>

<td width="10" height="53" valign="top"></td>

</tr>

</table>

</body>

</html>

HTML

}

else # все данные правильно введены

{

# Если все поля заполнены правильно, то начинаем их обрабатывать.

$Text=~tr/&bsol;r&bsol;n/ /; #заменяем перевод строки на пробел

# Если в текстовом поле формы (text box) посетитель нажимал Enter,

# то нужно убрать символы перевода строки, чтобы можно было записать

# все поля формы в одну строку файла.

if ($Work eq '') {$Work=' '}; #если пусто - то пробел

# Если поле не заполнено, то оно равно пробелу.

$Name=~s/&/ /g;

$Work=~s/&/ /g;

$Text=~s/&/ /g;

$Email=~s/&/ /g;

# Если посетитель использовал символ &, то заменяем его на пробел,

# поскольку этот символ мы будем использовать для разделения наших полей в файле.

open(OutFile, ">>guestbook.txt") || die;

# Открываем файл для добавления.

$Time=localtime; #получаем время

# Получаем время заполнения гостевой книги.

$line=join('&', $Time, $Name, $Work, $RadioButton, $Text, $Email, $ENV{REMOTE_HOST});

# И, наконец, слепляем все поля формы в одну строку. На всякий случай добавляем в конце

# IP адрес посетителя, взятый из переменных окружения.

print OutFile "$line&bsol;n";

close OutFile;

# Записываем полученную строку в файл и закрываем его.

# Осталось только сказать посетителю спасибо.

# выводим сообщение о успехе

print "Content-type: text/html&bsol;n&bsol;n";

print "<html>&bsol;n" ;

print "&bsol;n" ;

print "<head>&bsol;n" ;

print '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'."&bsol;n" ;

print '<meta name="GENERATOR" content="Microsoft FrontPage 3.0">'."&bsol;n" ;

print "<title>Книга жалоб и предложений</title>&bsol;n" ;

print "</head>&bsol;n" ;

print "&bsol;n" ;

print '<body background="../images/background_new.jpg">'."&bsol;n" ;

print '<div align="left">'."&bsol;n" ;

print "&bsol;n" ;

print '<table border="0" width="630" height="49">'."&bsol;n" ;

print " <tr>&bsol;n" ;

print ' <td width="200" height="45"></td>'."&bsol;n" ;

print ' <td width="430" height="45"><p align="center">';

print '<img src="../images/guestbook.GIF" alt="Книгажалоб" WIDTH="258" HEIGHT="60"></td>'."&bsol;n" ;

print " </tr>&bsol;n" ;

print "</table>&bsol;n" ;

print '</div><div align="left">'."&bsol;n" ;

print "&bsol;n" ;

print '<table border="0" width="630" height="53" cellspacing="0" cellpadding="0">'."&bsol;n" ;

print " <tr>&bsol;n" ;

print ' <td width="200" height="260" valign="top"><p align="center">'."&bsol;n" ;

DoInclude("D:/InetPub/wwwroot/_menu.htm");

print ' <p align="left"></td>'."&bsol;n" ;

print ' <td width="10" height="53" valign="top"></td>'."&bsol;n" ;

print ' <td width="410" height="53" valign="top"><p align="center"><small>Вашиданные'."&bsol;n" ;

print " приняты. Спасибо.</small></p>&bsol;n" ;

print ' <p align="center"><a href="read_guestbook.pl">';

print '<img src="../images/read.jpg" alt="Почитать" border="0" WIDTH="63" HEIGHT="21"></a> </td>'."&bsol;n" ;

print " </tr>&bsol;n" ;

print "</table>&bsol;n" ;

print "</div>&bsol;n" ;

print "&bsol;n" ;

print "<table>&bsol;n" ;

print " <tr>&bsol;n" ;

print ' <td width="10" height="53" valign="top"></td>'."&bsol;n" ;

print " </tr>&bsol;n" ;

print "</table>&bsol;n" ;

print "</body>&bsol;n" ;

print "</html>&bsol;n" ;

}

# Не забываем подпрограмму разбора данных из формы.

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";

#if you want multi-selects to goto into an array change to:

#$field{$name} .= "&bsol;0$val";

}

}

}

return 1;

}

Вот и все. Пример работы описанного скрипта можно посмотреть на http://treagraf.tasur.edu.ru/cgi-bin/add_guestbook.pl

read_guestbook.pl - чтениекниги

#! e:&bsol;perl5&bsol;perl

# Первая строка, как обычно

require "ssi-pl.pl";

# Я использую навигационную панель в виде SSI-включения. Для этого используется модуль ssi-pl.pl

open(InFile, "guestbook.txt") || die;

# Открываем файл с записями гостевой книги.

@lines=<InFile>;

# Читаем строки в массив.

# Выдаем шапку HTML страницы.

print <<HTML;

Content-type: text/html

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<meta name="GENERATOR" content="Microsoft FrontPage 3.0">

<title>Книга жалоб и предложений - нам пишут</title>

</head>

<body background="../images/background_new.jpg">

<div align="left">

<table border="0" width="630" height="49">

<tr>

<td width="200" height="45"></td>

<td width="430" height="45"><p align="center"><img src="../images/guestbook.GIF"

alt="Книгажалоб" WIDTH="258" HEIGHT="60"></td>

</tr>

</table>

</div><div align="left">

<table border="0" width="630" height="53" cellspacing="0" cellpadding="0">

<tr>

<td width="200" height="260" valign="top"><p align="center"><small>

HTML

DoInclude("D:/InetPub/wwwroot/_menu.htm");

print <<HTML;

</p>

<p align="left"></td>

<td width="10" height="53" valign="top"></td>

<td width="410" height="53" valign="top"><p align="center">Нампишут:</p>

<table border="0" width="100%" cellspacing="0" cellpadding="0">

HTML

# Теперь выводим записи в невидимой (в смысле, рамка не видима) таблице.

# Чтобы свежие записи отображать первыми, обрабатываем массив строк с конца.

for ($i=$#lines; $i>=$[; $i--) #обрабатываем строки файла с конца

{

# Разделяем строку на части

@item=split('&', $lines[$i]); #разделяем на части

# Теперь заменяем HTML тэги в записи (на случай какого-нибудь хитрого юзера)

foreach (@item)

{

$_=~s/</</g;

$_=~s/>/>/g;

}

# Приступаем непосредственно к выводу записей в HTML

print "<tr>&bsol;n";

print '<td width="100%"><dl>'."&bsol;n";

# В зависимости от поля, где посетителю предлагался выбор понравилось - не понравилось,

# рисуем картинку с веселой или грустной мордочкой соответственно. В качестве ALT тэга

# картинки пропишем IP адрес посетителя.

print '<dt><img src="../images/'.$item[3].'.gif" width="31" height="31" alt="';

priny $item[6].'" align="absbottom"'."&bsol;n";

# Выводим остальные поля.

print 'align="absmiddle"><small>'.' '.$item[4]."</small></dt>&bsol;n";

print '<dt><small>'.$item[1].', '.$item[2]."</small></dt>&bsol;n";

print '<dt><a href="mailto:'.$item[5].'"><small>'.$item[5].'</small></a></dt>'."&bsol;n";

print '<dt><small>'.$item[0]."</small></dt>&bsol;n";

print "</dl>&bsol;n";

print "</td>&bsol;n";

print "</tr>&bsol;n";

}

# Осталось вывести окончание HTML

print <<HTML;

</table>

</td>

<td width="10" height="53" valign="top"></td>

</tr>

</table>

</div>

</body>

</html>

HTML

close InFile;

# Закрываем файл с записями гостевой книги.

Список литературы

Александр Боровский . Практический Перл для начинающего.