This page has been robot translated, sorry for typos if any. Original content here.

Dieser Artikel wurde für Menschen geschrieben, die aufgrund zwingender Umstände ungeduldig waren, Pearl dringend zu studieren. Für mich war dieser Umstand, dass mein Computer ein WEB-Server wurde, nur ich bzw. der WEB-Master. Es wird akzeptiert, aus den Fehlern anderer als Experiment zu lernen, daher empfehle ich Ihnen, sich um Ihr Experiment zu kümmern, um Pearl zu studieren.

Sie müssen sofort klären, für wen das alles geschrieben wird. Wenn Ihr Server auf einer UNIX-Plattform ausgeführt wird, müssen wir Ihren Artikel aussprechen. Ich habe auch Windows NT Workstation 4.0 (RUS) plus Service Pack 3 installiert. Als es Zeit war, einen WEB-Server von einem Computer aus zu erstellen, stürzten wir uns zu den integrierten Diensten des WEB-Knotens, stellten aber schnell fest, dass mir das nicht gefiel (warum? ). Und hier riet eine gutmütige Person, Xitami WEB Server von der iMatix Corporation ( www.imatix.com ) zu installieren , was sich auch diesen Tag lohnt.

Was Pearl selbst berührt, ist etwas komplizierter. Nach dem Durchsuchen verschiedener Perlov-Server (www.perl.org, www.perl.com) haben wir festgestellt, dass die Pearl-Versionen so zahlreich sind, dass es ziemlich schwierig ist, etwas bestimmtes auszuwählen. Gleichzeitig gibt es keine verständlichen Empfehlungen zur Wahl der einen oder anderen Version. Wir haben fast alle Versionen für Windows ausprobiert und die Wahl von Active Perl gestoppt.

Für eine Person, die von jedem Vindovoz und Delphi verwöhnt wird, ist es ziemlich ungewöhnlich, Programme für Pearl zu schreiben. Ich empfehle daher dringend, Perl Builder gleichzeitig zu installieren. Sie können es unter www.solutionsoft.com erhalten. Dort lag eine 30-Tage-Demoversion.

Nun, ich denke es ist Zeit, direkt zum Unterricht zu gehen. Im Allgemeinen funktioniert das Pearl-Skript wie jedes andere Programm folgendermaßen:

  1. empfängt Daten
  2. verarbeitet Daten
  3. gibt Ergebnisse

Sie können Daten mithilfe von doppelten Methoden - GET und POST - in das Skript übertragen. Der Unterschied besteht darin, dass bei der Verwendung von GET die Daten in der Adressleiste des Browsers ohne Unterbrechung inaktiv sind, beispielsweise:

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

In diesem Fall übernimmt das Skript B_price.pl die Daten in der Umgebungsvariablen QUERY-STRING.

$data=$ENV{'QUERY_STRING'};

Bei Verwendung der POST-Methode werden Daten an die Standard-Skripteingabe übergeben. Die Länge des Datenbausteins wird in der Variablen CONTENT_LENGTH übernommen:

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

Jetzt müssen die Daten in eine verdaubare Form übersetzt werden, da sie verschlüsselt sind.

Die Standardvereinbarung besteht darin, Leerzeichen durch Pluszeichen zu ersetzen und dann die verbleibenden nicht akzeptablen Zeichen mit ASCII-Codes in hexadezimaler Form zu codieren, bevor das Zeichen (%) eingefügt wird. Beispiel:

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

Das heisst:

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

Den Abfrage-String einmal in den Hauptcode zu decodieren, ist am besten für Sie. Die Aufgabe "wie?" Es gibt viele Antworten, die keinen Sinn machen, umzuschreiben. Ich werde nur eine kleine Probe zitieren:

Ersetzen Sie die Zeichen (+) durch Leerzeichen

$query = s/\+/ /g;

Dann ersetzen wir alle Kombinationen des Zeichens (%), nach denen Hexadezimalzahlen folgen, durch das entsprechende ASCII-Zeichen

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

Ich benutze, was Perl Builder empfiehlt:

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

Am Ende des Skripts platzieren wir das Unterprogramm für das "transparente" Lesen von Daten.

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

Die zweite Phase der Arbeit des Skripts - Datenverarbeitung - ganz nach Ihrem Ermessen. Überprüfen Sie die empfangenen Daten auf Richtigkeit, schreiben Sie sie in eine Datei und machen Sie, was Sie wollen.

Am Ende müssen Sie dem Browser des Clients einige Ergebnisse mitteilen, damit der Browser sie korrekt anzeigt. Das heißt, Sie müssen die Ergebnisse in HTML angeben. Dies geschieht einfach: (auch auf verschiedene Weise möglich)

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

Im Feld "Kategorie" geben Sie Folgendes ein: ', $ Category'

', "\ n"

All dies berührt Skripts, die Daten von einem Formular auf einer HTML-Seite empfangen. In diesem Fall ist die Seite mit dem Formular - getrennt vom Skript - separat. Sie können es schöner und bequemer gestalten: Kombinieren Sie die Seite als Skript in einer einzigen Entität. Dazu wird das Skript nach dem Schema geschrieben:

  1. Beim Hauptstart zeichnet das Skript eine HTML-Seite mit dem Formular sowie einem Link im ACTION-Tag zu sich selbst. Der erste Lauf wird durch das Fehlen von Eingabedaten bestimmt.
  2. Wenn die Eingabedaten vorhanden sind, erfassen wir sie, verarbeiten sie und geben Ergebnisse aus.

Beispiel:

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

Gästebuch

Der allgemeine Algorithmus der Gästebucharbeit ist:

1. Wenn der Besucher einen Eintrag in das Buch vornehmen möchte, dann
1.1 Holen Sie sich die Daten
1.2 Schreiben Sie sie in eine Datei oder Datenbank
1.3 Danke für HTML, wir empfehlen auch, andere Beiträge zu würdigen.
2. Wenn der Besucher die Einträge im Buch ehren möchte, dann
2.1 Wir lesen Datensätze aus einer Datei oder aus einer Datenbank
2.2 Drucken Sie sie schön in HTML

Um die Wahrnehmung zu erleichtern, haben wir die Punkte 1 sowie 2 separate Skripte add_guestbook.pl und auch read_guestbook.pl erstellt . Gästebuchnachrichten werden zeilenweise in der Textdatei gespeichert, d. H. für jeden Eintrag - eine Zeichenfolge. Dies geschieht zum bequemen Lesen dieser Datei. Beispiel für einen Eintrag:

Sat Dez 5 13:31:20 1998 & Natasha & student & Good & Für die Quelle gut. Erfolge in diesem Bereich für Sie, Alexander! & Net @ poka & 194.226.60.34

Hier finden Sie eine Beschreibung der Felder des betreffenden Gästebuchs.
Name, Vorname, Vorname, Vorname, Spitzname - nach Ermessen des Besuchers
Arbeit - ein Beruf, eine Familie von Berufen
RadioButton - drei Tasten: wie (Gut), mag nicht (Schlecht), kümmert mich nicht (Unterschiedlich)
Text - Textfeldkommentare sind ebenfalls Kommentare.
E-Mail - Rücksendeadresse

add_guestbook.pl - Bucheintrag

#! 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>мне понравилось Lächle glücklich </small></p> </div><div align="left"><p><small> </small><input type="radio" name="RadioButton" value="Bad"><small>мне никак не понравилось Lächeln: </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>мне понравилось Lächle glücklich </small></p> </div><div align="left"><p><small> </small><input type="radio" name="RadioButton" value="Bad"><small>мне никак не понравилось Lächeln: </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; }

Hier auch alles. Ein Beispiel für die Arbeit des beschriebenen Skripts finden Sie unter http://treagraf.tasur.edu.ru/cgi-bin/add_guestbook.pl

read_guestbook.pl - ein Buch lesen

#! 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; # Закрываем файл с записями гостевой книги.