|
perl写的留言本 |
| $username="TimeSpace"; #用户名 $psd="123456"; #用户密码 $zy="TimeSpace社区"; #主页名称 $lyb="梦幻留言本"; #留言本名称 $zyurl="http://timespace.ccoo.com"; #主页URL $cgiurl="http://www.z982.f2s.com/guest/guest.cgi"; #脚本URL $img="http://www.z982.f2s.com/guest/images"; #图片目录URL $mailurl="/usr/sbin/sendmail -t"; #sendmail的路径 $mail='[email protected]'; #你的邮箱 $my=10; #每页显示的条数 ########################设定结束######################### $sj1="sj1.cgi"; $sj2="sj2.cgi"; unless(-f "$sj1"){ open (TMP,">$sj1")|| die $!; close(TMP); chmod(0666,"$sj1"); } unless(-f "$sj2"){ open (TMP,">$sj2")|| die $!; close(TMP); chmod(0666,"$sj2"); } print "Content-type: text/html\n\n"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s/<!--(.|\n)*-->//g; $FORM{$name} = $value; $FORM{$name} = $value; } $name = $FORM{'name'}; $t_name=$name; $t_name=~ s/<([^>]|\n)*>//g; $t_name=~ s/>/>/g; $t_name=~ s/</</g; $t_name=~ s/ //g; $t_name=~ s/&//g; $t_name=~ s/ //g; $name=$t_name; $email = $FORM{'email'}; $url = $FORM{'url'}; $nr = $FORM{'nr'}; $nr=~ s/<([^>]|\n)*>//g; $nr=~ s/>/>/g; $nr=~ s/</</g; $nr=~ s/\t/--/g; $nr=~ s/\n/\<br\>/g; $oicq = $FORM{'oicq'}; $dz = $FORM{'dz'}; $bzhf = $FORM{'bzhf'}; $bzhf=~ s/<([^>]|\n)*>//g; $bzhf=~ s/>/>/g; $bzhf=~ s/</</g; $bzhf=~ s/\t/--/g; $bzhf=~ s/\n/\<br\>/g; $menu = $FORM{'menu'}; $ip = $ENV{'REMOTE_ADDR'}; $qqh = $FORM{'qqh'}; $page = $FORM{'page'}; $pass = $FORM{'pass'}; $bzhf = $FORM{'bzhf'}; $id = $FORM{'id'}; unless($page){$page=1;} open (COUNT,"$sj2")|| die $!; @lines=<COUNT>; close(COUNT); foreach $line (@lines){ ($lyzs)=$line; } if(($pass)&&($pass ne $psd)){&errorview("对不起,你的密码不对,请重试!");exit;} if($id>$lyzs){&errorview("对不起,这条留言不存在!");exit;} if($menu eq "delall"){&delall; exit;} if($menu eq "reply"){&reply; exit;} if($menu eq "huifu"){&huifu; exit;} if($menu eq "dela"){&dela; exit;} if($menu eq "del1"){&del1; exit;} if($menu eq "del"){&del; exit;} if($menu eq "admin"){&admin; exit;} if($menu eq "add"){&add; exit;} open (CHAT,"$sj1")|| die $!; @lines=<CHAT>; close(CHAT); $zt="游客访问"; if($pass eq $psd){$zt="版主阅读";} foreach $line (@lines){ ($name,$email,$url,$nr,$ip,$oicq,$dz,$date,$qqh,$hfnr,$id)=split(/\t/,$line); if(($id>=$lyzs-$page*$my+1)&&($id<=$lyzs-($page-1)*$my)&&($id)){ if(((!$qqh)&&($hfnr))||($pass eq $psd)){$nr=$nr."<br><br><b>版主回复:</b><font color=blue>$hfnr</font>";} if(($qqh)&&($pass ne $psd)){ if($hfnr eq ""){$nr="悄悄话……(<a href=$cgiurl?menu=admin>版主阅读</a>)";} else {$nr="悄悄话……(<a href=$cgiurl?menu=admin>版主阅读</a>)<br><br><b>版主回复:</b><font color=blue>$hfnr</font>";}} $html="<TABLE cellSpacing=0 cellPadding=0 width=362 border=0><TBODY><TR><TD width=7><IMG height=4 src=$img/lefttop.gif width=6></TD><TD width=377 background=$img/top.gif colSpan=3><IMG height=4 src=$img/top.gif width=1></TD><TD width=7><IMG height=4 src=$img/righttop.gif></TD></TR><TR><TD vAlign=top width=7 background=$img/lwing.gif rowSpan=3><IMGheight=18 src=$img/left.gif width=6></TD><TD vAlign=top width=65 background=$img/titlebg.gif><IMG src=$img/close.gif border=0> </TD><TD vAlign=top noWrap align=middle width=275 background=$img/titlebg.gif><SPAN style=BACKGROUND-COLOR:#cecece> 第 <FONT color=red>$id</font>条留言 共 <FONT color=red>$lyzs</FONT> 条 </SPAN></TD><TD width=34><IMG height=18 src=$img/right_b.gif width=34></TD><TD vAlign=top width=7 background=$img/rwing.gif rowSpan=3><IMG height=18 src=$img/right.gif width=7></TD></TR><TR><TD width=377 background=$img/hr.gif colSpan=3><IMG height=2 src=$img/hr.gif width=1></TD></TR><TR><TD width=377 colSpan=3 height=92> <TABLE height=115 cellSpacing=0 borderColorDark=#dedfdf cellPadding=2 width=377 borderColorLight=#666666 border=1><TBODY><TR><TD align=middle width=56 bgColor=#eaeaea height=22>姓 名:</TD><TD width=131 height=22>$name</TD><TD align=middle width=42 bgColor=#eaeaea height=22>时 间:</TD><TD width=122 height=22><P align=center>$date</P></TD></TR><TR><TD align=middle width=56 bgColor=#eaeaea height=21>信 息:</TD><TD width=131 height=21><P align=center><a href=$url><IMG height=16 src=$img/home.gif width=16 border=0 alt=访问$name的主页></a> <a href=mailto:$email><IMG height=16 src=$img/mail.gif width=16 border=0 alt=给$name回信></a> <IMG height=16 src=$img/oicq.gif width=16 border=0 alt=$name的OICQ号码是$oicq> <IMG height=15 src=$img/ip.gif width=13 border=0 alt=$name的IP是$ip></P></TD><TD align=middle width=42 bgColor=#eaeaea height=21>操 作:</TD><TD width=122 height=21 align=center><A href=$cgiurl?menu=reply&id=$id> <IMG height=16 alt=回复留言(只有版主才有删除的权利!) src=$img/write.gif width=16 border=0> 回复</A> <A href=$cgiurl?menu=del&id=$id><IMG height=16 alt=删除该留言(只有版主才有删除的权利!) src=$img/recycle.gif width=14 border=0> 删除</A></TD></TR><TR><TD align=middle width=56 bgColor=#eaeaea>留 言:</TD><TD width=307 colSpan=3>$nr</TD></TR></TBODY></TABLE></TD></TR><TR><TD width=7><IMG height=7 src=$img/leftbottom.gif width=6></TD><TD width=377 background=$img/bottom.gif colSpan=3><IMG height=7 src=$img/bottom.gif width=1></TD><TD width=7><IMG height=7 src=$img/rightbottom.gif width=7></TD></TR></TBODY></TABLE><BR>$html"; }} $ys=$lyzs/$my+1; for($i=1;$i<$ys;$i++) {$djy="$djy<a href=$cgiurl?page=$i>第$i页</a> ";} unless($lyzs){$djy="现在还没有访客留言!";} print <<EOF; <HTML><HEAD><TITLE>$lyb</TITLE> <META http-equiv=Content-Type content="text/html; charset=gb2312"> EOF &css; print <<EOF; </HEAD> <body background=$img/bg.gif> <DIV style="LEFT: 310px; WIDTH: 455px; POSITION: absolute; TOP: -11px; HEIGHT: 447px"> <CENTER> $html </CENTER></DIV> <SCRIPT language=JavaScript> function KB_keepItInIE(theName,theWantTop,theWantLeft) { theRealTop=parseInt(document.body.scrollTop) theTrueTop=theWantTop+theRealTop document.all[theName].style.top=theTrueTop theRealLeft=parseInt(document.body.scrollLeft) theTrueLeft=theWantLeft+theRealLeft document.all[theName].style.left=theTrueLeft } function KB_keepItInNN(theName,theWantX,theWantY) { theRealLay=document.layers[theName] theBadX=self.pageYOffset theBadY=self.pageXOffset theRealX=theBadX+theWantX theRealY=theBadY+theWantY theRealLay.moveTo(theRealY,theRealX) } IE4=(document.all)?1:0 NN4=(document.layers)?1:0 if (IE4) setInterval('KB_keepItInIE("KBStatic",8,8)',200) if (NN4) setInterval('KB_keepItInNN("KBStatic",8,8)',200) </SCRIPT> <DIV id=KBStatic style="Z-INDEX: 25; LEFT: 8px; WIDTH: 217px; POSITION: absolute; TOP: 8px; HEIGHT: 400px"> <TABLE height=13 cellSpacing=0 cellPadding=0 width="107%" border=0> <TBODY> <TR> <TD width="100%" height=6>你在:<a href=$zyurl>$zy</a>>><b>$lyb</b><BR><BR>每页<b>$my</b>条,当前第<b>$page</b>页<br><br>$djy</TD></TR> <TR> <TD width="100%" height=1><br></TD></TR> <TR> <TD width="100%" height=1> <P align=center><B><FONT color=#000080 size=3>签写留言</FONT></B></P></TD></TR> <TR> <TD width="100%" height=15> <FORM action=$cgiurl method=post> <INPUT type=hidden value=add name=menu> <TABLE height=1 cellSpacing=0 borderColorDark=#808080 cellPadding=0 width="94%" borderColorLight=#c0c0c0 border=1> <TBODY> <TR> <TD align=middle width="47%" bgColor=#c0c0c0 height=1><FONT color=#000000>姓 名:</FONT></TD> <TD width="95%" bgColor=#c0c0c0 height=1><FONT color=#000000><INPUT class=stedit maxLength=50 size=23 name=name> </FONT></TD></TR> <TR> <TD align=middle width="47%" height=1><FONT color=#000000>地 址:</FONT></TD> <TD width="95%" height=1><FONT color=#000000><INPUT class=stedit maxLength=50 size=23 name=dz></FONT> </TD></TR> <TR> <TD align=middle width="47%" bgColor=#c0c0c0 height=1><FONT color=#000000>邮 件:</FONT></TD> <TD width="95%" bgColor=#c0c0c0 height=1><FONT color=#000000><INPUT class=stedit maxLength=30 size=23 name=email></FONT> </TD></TR> <TR> <TD align=middle width="47%" height=1><FONT color=#000000>主 页:</FONT> </TD> <TD width="95%" height=1><FONT color=#000000><INPUT class=stedit maxLength=50 size=23 value=http:// name=url></FONT> </TD></TR> <TR> <TD align=middle width="47%" bgColor=#c0c0c0 height=1><FONT color=#000000>OICQ:</FONT></TD> <TD width="95%" bgColor=#c0c0c0 height=1><FONT color=#000000><INPUT class=stedit maxLength=50 size=23 name=oicq></FONT> </TD></TR> <TR> <TD align=middle width="47%" bgColor=#c0c0c0 height=1><FONT color=#000000>私 语:</FONT></TD> <TD width="95%" bgColor=#c0c0c0 height=1><FONT color=#000000><INPUT type=checkbox name=qqh> 选中时只供版主阅读</FONT> </TD></TR> <TR> <TD align=middle width="47%" height=62><FONT color=#000000>留 言:</FONT></TD> <TD width="95%" height=62><FONT color=#000000><TEXTAREA class=stedit name=nr rows=4 cols=24></TEXTAREA></FONT> </TD></TR> <TR> <TD width="124%" bgColor=#c0c0c0 colSpan=2 height=28> <P align=center><FONT color=#000000><INPUT class=stbtm type=submit value=签写留言 name=B1></FONT><FONT color=#000000> <INPUT class=stbtm type=reset value=重新来过 name=B2></FONT></P></TD></TR></TBODY></TABLE></FORM></TD></TR> <TR> <TD width="100%"> <P align=right>论坛操作:<a href=$cgiurl?menu=dela><b>清空留言!</a> </b><br>论坛状态:<b>$zt! </b><br><br><br>程序设计:<A target=_blank href="http://timespace.ccoo.com/">TimeSpace工作室</A></P></TD></TR></TBODY></TABLE></DIV></BODY></HTML> EOF sub add{ if(($name eq "")||($nr eq "")){&errorview("对不起,名字和留言内容是必需填写的,请重新输入!");exit;} if(($email)&&(!($email=~ /.*\@.*\..*/))){&errorview("对不起,您的Email输入错误!");exit;} if(length($nr) > 1000 ){&errorview("对不起,留言内容不能大于500个汉字!");exit;} ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday)= localtime(time+(3600*$time_hour)); $mon=$mon+1; if($mon <10){$mon="0".$mon;} if($mday<10){$mday="0".$mday;} if($hour<10){$hour="0".$hour;} if($min<10){$min="0".$min;} if($sec<10){$sec="0".$sec;} $year=$year+1900; $date=$year."-".$mon."-".$mday.".".$hour.":".$min.":".$sec; $lyzs=$lyzs+1; open(FILE,">$sj2")|| die $!; print FILE "$lyzs"; close(FILE); while(-f "counter.lock"){ sleep(1);} open(LOCKFILE,">counter.lock"); open(FILE,">>$sj1")|| die $!; print FILE "$name\t$email\t$url\t$nr\t$ip\t$oicq\t$dz\t$date\t$qqh\t$hfnr\t$lyzs\n"; close(FILE); close(LOCKFILE); unlink("counter.lock"); open (OUTMAIL,"| $mailurl")|| die "Mail system Error!"; print OUTMAIL "To: $mail\n"; print OUTMAIL "From: $name\n"; print OUTMAIL "Subject: $lyb新留言\n"; print OUTMAIL "$username, 您好!\n\n"; print OUTMAIL " $lyb有来自$dz的$name给您的留言,内容是:\n\n"; print OUTMAIL "$nr\n\n"; print OUTMAIL "具体请查看这里($cgiurl)\n\n"; print OUTMAIL " 免费留言本程序制作:TimeSpace工作室(http://timespace.ccoo.com)\n\n\n"; close(OUTMAIL); print <<EOF; <html><head><title>留言成功!</title> EOF &css; print <<EOF; <meta HTTP-EQUIV=REFRESH CONTENT=2;url=$cgiurl> <body background=$img/bg.gif><center>谢谢<b>$name,留言信息已经发送成功!</b><br><br>2 秒后系统自动返回,如果没有反应,请按<a href=$cgiurl>这里刷新!</a> </center> </body></html> EOF } sub css{ print <<EOF; <STYLE type=text/css>A { FONT-SIZE: 9pt; COLOR: #336699; FONT-FAMILY: "宋体"; TEXT-DECORATION: none } A:link { TEXT-DECORATION: none } A:visited { TEXT-DECORATION: none } A:active { TEXT-DECORATION: none } A:hover { TEXT-DECORATION: underline overline } BODY { FONT-SIZE: 9pt; FONT-FAMILY: "宋体", "serif" } TABLE { FONT-SIZE: 9pt; FONT-FAMILY: "宋体", "serif" } TEXTAREA { BORDER-RIGHT: #101010 1px solid; BORDER-TOP: #101010 1px solid; BORDER-LEFT: #101010 1px solid; COLOR: #000000; BORDER-BOTTOM: #101010 1px solid; BACKGROUND-COLOR: #f0f0f0 } .stedit { BORDER-RIGHT: #4a3163 1px solid; BORDER-TOP: #4a3163 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #4a3163 1px solid; BORDER-BOTTOM: #000066 1px solid } .stbtm { BORDER-RIGHT: #333333 1px solid; BORDER-TOP: #333333 1px solid; FONT-SIZE: 9pt; BORDER-LEFT: #333333 1px solid; BORDER-BOTTOM: #333333 1px solid; FONT-FAMILY: "宋体"; BACKGROUND-COLOR: #f3f3f3 } </STYLE> EOF } sub errorview { &css;print "<body background=$img/bg.gif><TITLE>出错提示</TITLE><TABLE width=100% border=0><TBODY><TR align=middle><TD height=413 valign=middle align=center><TABLE cellSpacing=0 borderColorDark=#ffffff bgColor=#F8F8F8 borderColorLight=#000000 border=1 width=275><TBODY><TR><TD width=350><TABLE cellSpacing=0 cellPadding=2 width=281 bgColor=#889c5c border=0><TBODY><TR><TD width=342><FONT color=#FFFFFF>◆ 出错提示……</FONT></TD><TD width=18><TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=0 bgColor=#e0e0e0 borderColorLight=#666666 border=1><TBODY><TR><TD><B><font color=#808080>×</font></B></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><TABLE cellPadding=4 width=283 border=0><TBODY><TR><TD vAlign=top align=center width=47><FONT size=7 face=Wingdings color=#ff0000>L</FONT></TD><TD width=210 align=center><P><font size=2>$_[0]</font></P></TD></TR><TR><TD vAlign=top align=center colSpan=2 width=269><div align=center><center><table border=1 bgcolor=#D8D0C8 cellspacing=0><tr><td width=100% align=center bordercolordark=#E6E6E6 bordercolorlight=#D8D0C8><A href=javascript:history.back()><font size=2 color=#000000> 确 定 </font></A></td></tr></table></center></div></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></HTML>";} sub del{ print <<Q; <html><head><title>删除留言!</title> Q &css; print <<Q; </head><body background=$img/bg.gif><center><b>删除第 $id 条留言!</b><br><FORM action=$cgiurl method=post><INPUT type=hidden value=$id name=id><INPUT type=hidden value=del1 name=menu> 请输入管理密码:<INPUT type=password class=stedit size=10 name=pass> <INPUT type=submit value=确定 class=stbtm name=B1></form><center></body> Q } sub dela{ print <<Q; <html><head><title>删除所有留言!</title> Q &css; print <<Q; </head><body background=$img/bg.gif><center><b>删除所有留言!</b><br><FORM action=$cgiurl method=post><INPUT type=hidden value=delall name=menu> 请输入管理密码:<INPUT type=password class=stedit size=10 name=pass> <INPUT type=submit value=确定 class=stbtm name=B1></form><center></body> Q } sub del1{ open (GUEST,"$sj1") ||die $!; @lines=<GUEST>; close(GUEST); while(-f "counter.lock"){ sleep(1);} open(LOCKFILE,">counter.lock"); open (GUEST,">$sj1") || die $!; foreach $usersays (@lines) { ($name,$email,$url,$nr,$ip,$oicq,$dz,$date,$qqh,$hfnr,$id1)=split(/\t/,$usersays); if($id!=$id1){ $id2=$id2+1; print GUEST "$name\t$email\t$url\t$nr\t$ip\t$oicq\t$dz\t$date\t$qqh\t$hfnr\t$id2\n"; } } close (GUEST); close(LOCKFILE); unlink("counter.lock"); $lyzs=$lyzs-1; open(FILE,">$sj2")|| die $!; print FILE "$lyzs"; close(FILE); print <<EOF; <html><head><title>删除留言成功!</title> EOF &css; print <<EOF; <meta HTTP-EQUIV=REFRESH CONTENT=2;url=$cgiurl> <body background=$img/bg.gif><center>谢谢<b>$username,删除留言成功!</b><br><br>2 秒后系统自动返回,如果没有反应,请按<a href=$cgiurl>这里刷新!</a> </center> </body></html> EOF } sub delall{ open (GUEST,">$sj1") || die $!; close (GUEST); open(FILE,">$sj2")|| die $!; close(FILE); print <<EOF; <html><head><title>删除留言成功!</title> EOF &css; print <<EOF; <meta HTTP-EQUIV=REFRESH CONTENT=2;url=$cgiurl> <body background=$img/bg.gif><center>谢谢<b>$username,删除所有留言成功!</b><br><br>2 秒后系统自动返回,如果没有反应,请按<a href=$cgiurl>这里刷新!</a> </center> </body></html> EOF } sub reply{ print <<Q; <html><head><title>回复留言!</title> Q &css; print <<Q; <body background=$img/bg.gif><b>回复第 $id 条留言!</b><br><div align=left><FORM action=$cgiurl method=post><INPUT type=hidden value=$id name=id><INPUT type=hidden value=huifu name=menu> 管理密码:<INPUT type=password class=stedit size=16 name=pass><br> 你的回复:<TEXTAREA class=stedit name=bzhf rows=3 cols=20></TEXTAREA><br> <INPUT type=submit value=确定 class=stbtm> <INPUT type=reset value=取消 class=stbtm></form></body> Q } sub huifu{ open (GUEST,"$sj1") ||die $!; @lines=<GUEST>; close(GUEST); while(-f "counter.lock"){ sleep(1);} open(LOCKFILE,">counter.lock"); open (GUEST,">$sj1") || die $!; foreach $usersays (@lines) { ($name,$email,$url,$nr,$ip,$oicq,$dz,$date,$qqh,$hfnr,$id1)=split(/\t/,$usersays); if($id==$id1){ if(length($bzhf) > 1000 ){&errorview("对不起,回复内容不能大于500个汉字!");exit;} $bzhf=~ s/<([^>]|\n)*>//g; $bzhf=~ s/>/>/g; $bzhf=~ s/</</g; $bzhf=~ s/\t/--/g; $bzhf=~ s/\n/\<br\>/g; $hfnr=$bzhf; if($email){ open (OUTMAIL,"| $mailurl")|| die "Mail system Error!"; print OUTMAIL "To: $email\n"; print OUTMAIL "Subject: 回复留言通知\n"; print OUTMAIL "$name 你好!\n"; print OUTMAIL " 谢谢你在$lyb留言,版主现在已经回复了您的留言\n"; print OUTMAIL " 请查看留言回复($cgiurl)\n\n\n"; print OUTMAIL " 程序制作:TimeSpace工作室(http://timespace.ccoo.com)\n"; print OUTMAIL "\n\n"; close(OUTMAIL); }} print GUEST "$name\t$email\t$url\t$nr\t$ip\t$oicq\t$dz\t$date\t$qqh\t$hfnr\t$id1"; } close (GUEST); close(LOCKFILE); unlink("counter.lock"); print <<EOF; <html><head><title>回复留言成功!</title> EOF &css; print <<EOF; <meta HTTP-EQUIV=REFRESH CONTENT=2;url=$cgiurl> <body background=$img/bg.gif><center>谢谢<b>$username,回复留言成功!</b><br><br>2 秒后系统自动返回,如果没有反应,请按<a href=$cgiurl>这里刷新!</a> </center> </body></html> EOF } sub admin{ print <<Q; <html><head><title>阅读悄悄话!</title> Q &css; print <<Q; </head><body background=$img/bg.gif><center><b>阅读悄悄话!</b><br><FORM action=$cgiurl method=post> 请输入管理密码:<INPUT type=password class=stedit size=10 name=pass> <INPUT type=submit value=确定 class=stbtm name=B1></form><center></body> Q } |