WebMaster/Programming/Perl/
Гостевая книга.
А вот еще пример того,как можно с умом использовать
нехитрые знания. Гостевая книга ,в которую каждый может записать
свое вам пожелание.
К ней прилагаются .gif -файлы,позволяющие указать свое настроение:
Запись происходит в базу данных guestbook.dat и при каждой новой
записи в гостевую книгу скрипт извещает по почте хозяина гостевой
книги, а тому кто в нее вошел по почте посылается сообщение об
этом.
#!/usr/bin/perl
#guestbook.cgi
$myemail="paaa\@uic.nnov.ru";
$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-hA-H]{2})/pack('C',hex($1))/eg;
return $val;
}
sub strhtm{
local($val)=@_;
$val=~s/&/&/g;
$val=~s/</</g;
$val=~s/>/>/g;
$val=~s/(http:\/\/\S+)/<A href="$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 src="$Mailgifs[0]"></TD><TD>
<IMG src="$Mailgifs[1]"></TD><TD><IMG
src="$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 src=\"$Mood\"><BR><A
href =\"mailto:$Email\">$Name</A>".
"(<A href=\"$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>";
print "<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);
}