Учебное пособие по CGI-программированию
Страница 29. Гостевая книга



Гостевая книга

А вот еще пример того,как можно с умом использовать нехитрые знания. Гостевая книга ,в которую каждый может записать свое вам пожелание.
К ней прилагаются .gif -файлы,позволяющие указать свое настроение:
Запись происходит в базу данных guestbook.dat и при каждой новой записи в гостевую книгу скрипт извещает по почте хозяина гостевой книги, а тому кто в нее вошел по почте посылается сообщение об этом.
#!/usr/bin/perl 
#guestbook.cgi $myemail=" Этот e-mail защищен от спам-ботов. Для его просмотра в вашем браузере должна быть включена поддержка Java-script ";
$myname="lesha";
$mail="mail";
($sd,$sn)=($ENV{'SCRIPT_FILENAME'}=~/(.*)\/([^\/]*)/); $datafile=$sd."\/guestbook.dat";
@Mailgifs=qw(../gifs/mood0.gif ../gifs/mood1.gif ../gifs/mood2.gif);
$Facetxt{$Mailgifs[0]}= ":)";
$Facetxt{$Mailgifs[1]}= ":|";
$Facetxt{$Mailgifs[2]}= ":("; 
sub urldecode{  local($val)=@_; 
$val=~s/\+/ /g;  $val=~s/%([0-9A-H]{2})/pack('C',hex($1))/eg;  return $val; 
}
sub strhtm{ 
local($val)=@_; 
$val=~s/&/&/g; 
$val=~s/</</g; 
$val=~s/>/>/g; 
$val=~s/(https:\/\/\S+)/<A xhref="$1">$1<\/A>/g; 
return $val; 
}
$cont_len=$ENV{'CONTENT_LENGTH'};
if($ENV{'REQUEST_METHOD'} eq 'GET'){query=$ENV{'QUERY_STRING'};}
else {sysread(STDIN,$query,$cont_len);}
if($query eq ''){
   print "Content-type: text/html\n\n";
   print <<HTML_generating; <HTML><HEAD><TITLE>Wellcome to my guestbook</TITLE></HEAD>
 <BODY bgcolor="cyan"> <CENTER><H1>Wellcome to my guestbook</H1></CENTER> <HR>
<FORM action="guestbook.cgi" METHOD="POST">
<TABLE border=0> <TR><TD>Name:</TD><TD colspan=3><INPUT NAME="Name"></TD></TR>
<TR><TD>E-mail:</TD><TD colspan=3><INPUT NAME="Email"></TD></TR>
<TR><TD>URL:</TD><TD colspan=3><INPUT NAME="URL"></TD></TR>
<TR><TD>Message:</TD><TD colspan=3>
<TEXTAREA NAME="Message" rows=6 cols=64></TEXTAREA></TD></TR>
<TR><TD>Mood:</TD><TD><IMG xsrc="$Mailgifs[0]"></TD>
<TD><IMG xsrc="$Mailgifs[1]"></TD><TD><IMG xsrc="$Mailgifs[2]"></TD></TR>
<TR><TD> </TD><TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[0]"></TD>
                    <TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[1]"></TD>
                    <TD><INPUT TYPE="radio" NAME="Mood" VALUE="$Mailgifs[2]"></TD></TR>
<TR><TD colspan=2><INPUT TYPE="submit" VALUE="Send"></TD>
     <TD colspan=2><INPUT TYPE="reset" VALUE="Clean"></TD></TR> </TABLE></FORM>
<HR><BR> HTML_generating   open DATAFILE,"$datafile"|| die "Cannot open $datafile $!\n";  
@GUESTDATA=<DATAFILE>;   print @GUESTDATA;   close DATAFILE;   print "</BODY></HTML>";  
}
else{  
foreach(@fields=split(/&/,$query)){    
if(/^Name=(.*)/){$Name=&urldecode($1);}    
if(/^Email=(.*)/){$Email=&urldecode($1);}    
if(/^URL=(.*)/){$URL=&urldecode($1);}    
if(/^Message=(.*)/){$Message=&urldecode($1);}    
if(/^Mood=(.*)/){$Mood=&urldecode($1);}    
}  
$MESSAGE=&strhtm($Message);  
if(-e $datafile){unless (-r $datafile && -w $datafile){die "Cannot access $datafile\n";}}  
$Newmsg="<IMG xsrc=\"$Mood\"><BR><A href =\"mailto:$Email\">$Name</A>".
          "(<A xhref=\"$URL\">$URL</A>):<BR>\n$MESSAGE<HR>\n";  
open DATAFILE,"+<$datafile" || die "Cannot open $datafile $!\n";  
@GUESTDATA=<DATAFILE>;  
@GUESTDATA=($Newmsg,@GUESTDATA);  
seek(DATAFILE,0,0);  
print DATAFILE @GUESTDATA;  
close DATAFILE;  
print "Content-type: text/html\n\n";  
print "<HTML><HEAD><TITLE>Congratulations</TITLE></HEAD>\n";  
print "<BODY bgcolor=\"cyan\">\n<CENTER>
<H1>Congratulations:you have successfully entered to $myname\'s";  
print "guestbook.Thank you!</H1></CENTER><HR>$Newmsg</BODY></HTML>";  
open MAIL,"|$mail $Email";   print MAIL "Guestbook\n";  
print MAIL "You have entered to $myname\'s guestbook\n";  
print MAIL "Thank you.\n\t\t\t\t$myname";  
close MAIL;  
format NOTIFYMAIL= Guestbook   ==========================
Guestbook Entry ======================= | Time:                    |Name:                                | |
@<<<<<<<<<<<<<<<<<<<<<<<<|@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
scalar localtime,$Name +--------------------------+-------------------------------------+ |
Email:                   |URL:                                 | | @<<<<<<<<<<<<<<<<<<<<<<<<|
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< | $Email,
$URL +--------------------------+-------------------------------------+ |
^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< |
$Message | ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<< | $Message | ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<<< | $Message | ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<<<<<    @<<<<< | $Message,$Facetxt{$Mood} =======================
=========================================== .   open NOTIFYMAIL,"|
$mail $myemail";   write NOTIFYMAIL;   close NOTIFYMAIL;   }            

 
« Предыдущая статья