Учебное пособие по CGI-программированию Страница 29. Гостевая книга
|
Страница 29 из 30
Гостевая книгаА вот еще пример того,как можно с умом использовать нехитрые знания. Гостевая книга ,в которую каждый может записать свое вам пожелание. К ней прилагаются .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; } |