Cet article est écrit pour les personnes qui en raison de force majeure démangent de toute urgence à explorer Perle. Pour moi, une telle circonstance est que mon ordinateur est devenu un serveur web, mais je, respectivement, WEB-maître. Apprendre des erreurs des autres faits comme une expérience, donc je vous conseille d'étudier la prise en charge de son expérience de Pearl.

Juste besoin de préciser pour qui il est écrit. si votre serveur fonctionne sur une plate-forme UNIX, que sommes-nous obligés de dire que votre article. J'ai également installé Windows NT Workstation 4.0 (RUS) plus Service Pack 3. A quelle heure il est temps de rendre l'ordinateur WEB-serveur, nous avons été précipités sur le site WEB de services intégrés, mais vite rendu compte qu'il a été, je n'aime pas (pourquoi? ). Et puis une personne de bonne humeur est conseillé de mettre Xitami serveur WEB de la Société, iMatix ( www.imatix.com ), qui se tient également à ce jour.

Avec des touches de nacre, alors il est un peu plus compliqué. nous avons appris que tant de versions de la Perle, que de choisir quelque chose de spécifique Digging assez difficile sur différents serveurs Perlov (www.perl.org, www.perl.com). Dans le même temps ce que certaines recommandations intelligibles sur l'élection d'un ou d'une autre version de nulle part. Après avoir essayé presque toutes les versions pour Windows, nous avons arrêté son élection à l'Active Perl.

Man, gâté chaque Vindovozami comme Delphi, programme griffonner sur Pearl tout à fait inhabituel, donc nous vous recommandons fortement de régler le temps Perl Builder. Prenez-il possible de www.solutionsoft.com. Il y avait là démo trente-type.

Eh bien, je pense qu'il est temps d'aller directement à la leçon. En général, le script dans le Pearl, ainsi que tout autre programme fonctionne comme ceci:

  1. réception de données
  2. le traitement de données
  3. Elle produit des résultats

Transférer des données vers le script peut être le double de méthodes - GET et POST. La différence entre eux est que les données de l'EEG à l'aide de l'arrêt au ralenti dans la barre d'adresse du navigateur, napimer:

httр://treagraf.tasur.edu.ru/cgi-bin/price.pl?Category=POWER&Description=varta

Dans ce cas, le script B_price.pl prend les données dans la variable d' environnement QUERY-STRING.

$data=$ENV{'QUERY_STRING'};

Lorsque vous utilisez la méthode POST, les données sont transmises à l'entrée standard du script. La longueur du bloc de données est considérée comme une variable de CONTENT_LENGTH:

read(STDIN,$data,$ENV{'CONTENT_LENGTH'});

Maintenant, les données doivent traduire les données en type digestible, car ils sont codés.

L'accord type remplace les espaces par des signes plus, puis coder les caractères non valides restants en utilisant le code ASCII en hexadécimal, qui est placé avant le signe (%). exemple:

http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?Category=%C2%E8%E4%E5%EE&Description=%E0%E1%E2%E3

Cela signifie que:

http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?Category=Видео&Description=абвг

Decode chaîne de requête dans la principale est le meilleur pour lui-même. Sur le problème de "comment?" Il y a beaucoup de réponses à réécrire cela n'a aucun sens. Pour ne donner qu'un petit échantillon:

Remplacer les signes (+) dans les lacunes

$query = s/\+/ /g;

Puis remplacer toutes les combinaisons signe (%), qui est ensuite suivie par des chiffres hexadécimaux, dans le caractère ASCII correspondant

$query = s/%([0-9A-H]{2})/pack('C', hex($1))/eg;

Je l'utilise qui conseille Perl Builder:

#! E:\perl5\bin\perl &GetFormInput; # вызов подпрограммы получения данных $Category = $field{'Category'}; # приобретаем данные из поля Category $Description = $field{'Description'}; # приобретаем данные из поля Description $Page = $field{'Page'}; # приобретаем данные из поля Page

A la fin du script est placé routine de lecture "transparent" de données.

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

La deuxième étape de l'écriture du travail - Données finissent - à votre entière discrétion. Vérifiez les données correctement, les écrire dans un fichier, faites ce que vous voulez.

Et à la fin, vous devez donner une partie du navigateur client, et que le navigateur les afficher correctement. Autrement dit, la nécessité de produire des résultats en HTML. Cela se fait simplement: (peut également être différent)

print 'Content-type: text/html', "/n/n"; #обязательная строка html "," / n / n "; print 'Content-type: text/html', "/n/n"; #обязательная строка print 'Content-type: text/html', "/n/n"; #обязательная строка print '

Dans la catégorie que vous avez entré: ', $ Catégorie,'

', "\ N"

Tout cela touche les scripts qui reçoivent des données de formulaires sur une page HTML. A la même page avec la forme - séparément, le script - séparément. Vous pouvez faire une belle et pratique: fusionner la page et le script ensemble. Pour ce faire, le script est écrit par le régime:

  1. Lorsque le script de démarrage principal dessine une page HTML avec une forme et un lien dans l'ACTION marquer lui-même. Le premier départ est déterminé par l'absence de données d'entrée.
  2. Si les données d'entrée est, de les acquérir, de traiter et des résultats exceptionnels.

exemple:

#! E:\perl5\bin\perl if (($ENV{'QUERY_STRING'} eq '') or ($ENV{CONTENT_LENGTH}=0) ) { # генерируем страницу с формой } else {# приобретаем данные, обрабатываем также выдаем результат}

livre d'or

Total algorithme de livre d'or du travail est la suivante:

1. si un visiteur veut faire un enregistrement dans le livre,
1.1 Obtenir les données
1.2 écrit dans un fichier ou base de données
1.3 Nous disons merci à l'HTML suggéré honorer également d'autres dossiers
2. si un visiteur veut honorer les entrées dans le livre, la
2.1 enregistrements de lecture à partir d'un fichier ou d'une base de données
2.2 affiche gentiment en HTML

Pour plus de commodité, nous avons conçu les paragraphes 1 et 2 scripts séparés add_guestbook.pl également read_guestbook.pl respectivement. livre message Guest stocké dans une ligne de fichier texte en ligne, à savoir par enregistrement - ligne. Ceci est fait pour faciliter la lecture du fichier. Exemple entrées:

Sam 5 décembre 1998 13:31:20 & Natasha Student & & & la Bonne source pour de bon. Bonne chance à vous dans ce domaine, Александр!&нету@пока&194.226.60.34

Voici une description des domaines considérés le livre d'or.
Nom - le nom, nom, prénom, surnom - la discrétion du visiteur
Travail - profession, activités familiales
RadioButton - trois boutons: J'aime (Good), n'a pas aimé (Bad), ne se soucient pas (différent)
Texte - commentaires de zone de texte et des notes
Email - adresse de retour

add_guestbook.pl - entrée dans le livre

#! e:\perl5\perl # Первая строка, как обычно require "ssi-pl.pl"; # Я использую навигационную панель в виде SSI-включения. Для этого используется модуль ssi-pl.pl if (($ENV{'QUERY_STRING'} eq '') or ($ENV{CONTENT_LENGTH}=0) ) { # если нет входных данных, то генерируем страницу с формой print < <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">HTML DoInclude("_menu.htm"); # Это SSI-включение навигационной панели. print <<HTML; </p> <p align="left"> </td> <td width="10" height="53" valign="top"></td> <td width="410" height="53" valign="top"><table border="1" width="100%" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><form name="GuestBook" method="POST" action="add_guestbook.pl"> <div align="left"><p><small>Я, <input type="text" name="Name" size="20"></small>, <small>по профессии бесхитростный </small><input type="text" name="Work" size="20">, <small>посетив этот сервер также ознакомившись с представленными на нем материалами, хочу выразить свои чувства , эмоции следующими приличными словами:</small></p> </div><div align="left"><p><small> </small><input type="radio" value="Good" checked name="RadioButton"><small>мне понравилось Sourire heureux </small></p> </div><div align="left"><p><small> </small><input type="radio" name="RadioButton" value="Bad"><small>мне никак не понравилось Sourire triste </small></p> </div><div align="left"><p> <input type="radio" name="RadioButton" value="Different"><small>мне пофигу :-| </small></p> </div><div align="left"><p><small>В дополнение к сказанному хочу так же сказать: </small></p> </div><div align="left"><p><textarea rows="4" name="Text" cols="30"></textarea></p> </div><div align="left"><p><small>Прошу принять к рассмотрению мое заявление также незамедлительно принять мерки. Решение по моему заявлению направить письменно на мой электрический адрес </small><input type="text" name="Email" size="20"><small>.</small></p> </div><div align="center"><center><p><input src="../images/send.JPG" name="Send" alt="Послать" border="0" type="image" WIDTH="53" HEIGHT="21"> <a href="read_guestbook.pl"><img src="../images/read.jpg" alt="Почитать" border="0" WIDTH="63" HEIGHT="21"></a></p> </center></div> </form> </td> </tr> </table> </td> <td width="10" height="53" valign="top"></td> </tr></table></div></body></html>HTML die; } # Нынче приобретаем входные данные. &GetFormInput; $Name = $field{'Name'} ; $Work = $field{'Work'} ; $RadioButton = $field{'RadioButton'} ; $Text = $field{'Text'} ; $Email = $field{'Email'} ; $Send = $field{'Send'} ; # это поле никак не используется # Проверяем, заполнены ли обязательные поля. # если нет - генерируем HTML страницу с прошением заполнить нужные поля. if ($Name eq '' || $Email eq '' || $Text eq '') { 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">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/\r\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\n"; close OutFile; # Записываем полученную строку в файл также закрываем его. # Осталось только сказать посетителю спасибо. # выводим сообщение о успехе print "Content-type: text/html\n\n"; print "<html>\n" ; print "\n" ; print "<head>\n" ; print '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'."\n" ; print '<meta name="GENERATOR" content="Microsoft FrontPage 3.0">'."\n" ; print "<title>Книга жалоб также предложений</title>\n" ; print "</head>\n" ; print "\n" ; print '<body background="../images/background_new.jpg">'."\n" ; print '<div align="left">'."\n" ; print "\n" ; print '<table border="0" width="630" height="49">'."\n" ; print " <tr>\n" ; print ' <td width="200" height="45"></td>'."\n" ; print ' <td width="430" height="45"><p align="center">'; print '<img src="../images/guestbook.GIF" alt="Книга жалоб" WIDTH="258" HEIGHT="60"></td>'."\n" ; print " </tr>\n" ; print "</table>\n" ; print '</div><div align="left">'."\n" ; print "\n" ; print '<table border="0" width="630" height="53" cellspacing="0" cellpadding="0">'."\n" ; print " <tr>\n" ; print ' <td width="200" height="260" valign="top"><p align="center">'."\n" ; DoInclude("D:/InetPub/wwwroot/_menu.htm"); print ' <p align="left"> </td>'."\n" ; print ' <td width="10" height="53" valign="top"></td>'."\n" ; print ' <td width="410" height="53" valign="top"><p align="center"><small>Ваши данные'."\n" ; print " приняты. Спасибо.</small></p>\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>'."\n" ; print " </tr>\n" ; print "</table>\n" ; print "</div>\n" ; print "\n" ; print "<table>\n" ; print " <tr>\n" ; print ' <td width="10" height="53" valign="top"></td>'."\n" ; print " </tr>\n" ; print "</table>\n" ; print "</body>\n" ; print "</html>\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} .= "\0$val"; } } } return 1; } #! e:\perl5\perl # Первая строка, как обычно require "ssi-pl.pl"; # Я использую навигационную панель в виде SSI-включения. Для этого используется модуль ssi-pl.pl if (($ENV{'QUERY_STRING'} eq '') or ($ENV{CONTENT_LENGTH}=0) ) { # если нет входных данных, то генерируем страницу с формой print < <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">HTML DoInclude("_menu.htm"); # Это SSI-включение навигационной панели. print <<HTML; </p> <p align="left"> </td> <td width="10" height="53" valign="top"></td> <td width="410" height="53" valign="top"><table border="1" width="100%" cellspacing="0" cellpadding="0"> <tr> <td width="100%"><form name="GuestBook" method="POST" action="add_guestbook.pl"> <div align="left"><p><small>Я, <input type="text" name="Name" size="20"></small>, <small>по профессии бесхитростный </small><input type="text" name="Work" size="20">, <small>посетив этот сервер также ознакомившись с представленными на нем материалами, хочу выразить свои чувства , эмоции следующими приличными словами:</small></p> </div><div align="left"><p><small> </small><input type="radio" value="Good" checked name="RadioButton"><small>мне понравилось Sourire heureux </small></p> </div><div align="left"><p><small> </small><input type="radio" name="RadioButton" value="Bad"><small>мне никак не понравилось Sourire triste </small></p> </div><div align="left"><p> <input type="radio" name="RadioButton" value="Different"><small>мне пофигу :-| </small></p> </div><div align="left"><p><small>В дополнение к сказанному хочу так же сказать: </small></p> </div><div align="left"><p><textarea rows="4" name="Text" cols="30"></textarea></p> </div><div align="left"><p><small>Прошу принять к рассмотрению мое заявление также незамедлительно принять мерки. Решение по моему заявлению направить письменно на мой электрический адрес </small><input type="text" name="Email" size="20"><small>.</small></p> </div><div align="center"><center><p><input src="../images/send.JPG" name="Send" alt="Послать" border="0" type="image" WIDTH="53" HEIGHT="21"> <a href="read_guestbook.pl"><img src="../images/read.jpg" alt="Почитать" border="0" WIDTH="63" HEIGHT="21"></a></p> </center></div> </form> </td> </tr> </table> </td> <td width="10" height="53" valign="top"></td> </tr></table></div></body></html>HTML die; } # Нынче приобретаем входные данные. &GetFormInput; $Name = $field{'Name'} ; $Work = $field{'Work'} ; $RadioButton = $field{'RadioButton'} ; $Text = $field{'Text'} ; $Email = $field{'Email'} ; $Send = $field{'Send'} ; # это поле никак не используется # Проверяем, заполнены ли обязательные поля. # если нет - генерируем HTML страницу с прошением заполнить нужные поля. if ($Name eq '' || $Email eq '' || $Text eq '') { 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">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/\r\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\n"; close OutFile; # Записываем полученную строку в файл также закрываем его. # Осталось только сказать посетителю спасибо. # выводим сообщение о успехе print "Content-type: text/html\n\n"; print "<html>\n" ; print "\n" ; print "<head>\n" ; print '<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">'."\n" ; print '<meta name="GENERATOR" content="Microsoft FrontPage 3.0">'."\n" ; print "<title>Книга жалоб также предложений</title>\n" ; print "</head>\n" ; print "\n" ; print '<body background="../images/background_new.jpg">'."\n" ; print '<div align="left">'."\n" ; print "\n" ; print '<table border="0" width="630" height="49">'."\n" ; print " <tr>\n" ; print ' <td width="200" height="45"></td>'."\n" ; print ' <td width="430" height="45"><p align="center">'; print '<img src="../images/guestbook.GIF" alt="Книга жалоб" WIDTH="258" HEIGHT="60"></td>'."\n" ; print " </tr>\n" ; print "</table>\n" ; print '</div><div align="left">'."\n" ; print "\n" ; print '<table border="0" width="630" height="53" cellspacing="0" cellpadding="0">'."\n" ; print " <tr>\n" ; print ' <td width="200" height="260" valign="top"><p align="center">'."\n" ; DoInclude("D:/InetPub/wwwroot/_menu.htm"); print ' <p align="left"> </td>'."\n" ; print ' <td width="10" height="53" valign="top"></td>'."\n" ; print ' <td width="410" height="53" valign="top"><p align="center"><small>Ваши данные'."\n" ; print " приняты. Спасибо.</small></p>\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>'."\n" ; print " </tr>\n" ; print "</table>\n" ; print "</div>\n" ; print "\n" ; print "<table>\n" ; print " <tr>\n" ; print ' <td width="10" height="53" valign="top"></td>'."\n" ; print " </tr>\n" ; print "</table>\n" ; print "</body>\n" ; print "</html>\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} .= "\0$val"; } } } return 1; }

Ici et tout. Exemple de script de travail décrit peut être consulté sur http://treagraf.tasur.edu.ru/cgi-bin/add_guestbook.pl

read_guestbook.pl - lisant un livre

#! e:\perl5\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>\n"; print '<td width="100%"><dl>'."\n"; # В зависимости от поля, в каком месте посетителю предлагался избрание понравилось - никак не понравилось, # рисуем картинку с радостной либо грустной мордочкой соответственно. В качестве ALT тэга # картинки пропишем IP адрес посетителя. print '<dt><img src="../images/'.$item[3].'.gif" width="31" height="31" alt="'; priny $item[6].'" align="absbottom"'."\n"; # Выводим остальные поля. print 'align="absmiddle"><small>'.' '.$item[4]."</small></dt>\n"; print '<dt><small>'.$item[1].', '.$item[2]."</small></dt>\n"; print '<dt><a href="mailto:'.$item[5].'"><small>'.$item[5].'</small></a></dt>'."\n"; print '<dt><small>'.$item[0]."</small></dt>\n"; print "</dl>\n"; print "</td>\n"; print "</tr>\n"; } # Осталось вывести окончание HTML print <<HTML; </table> </td> <td width="10" height="53" valign="top"></td> </tr></table></div></body></html>HTML close InFile; # Закрываем файл с записями гостевой книги.