励磁绕组,又要请教你了

chiev 2001-11-02 08:57:27
励磁绕组,你好,关于上次的答题程序,又要请教你了 *_*
1,我想在unix下使用本程序,sendmail需要一些设置,如何修改阿?
2,验证输入信息的合法性问题,比如我想限制“电话号码”的位数,email的正确性。
3,我想通过另外一个cgi程序来以表格的形式调用已经保存的用户信息,这个怎么怎么写阿?
4,可否在cookie中作一些修改,使答题者不能连续三次答题?


chiev
2001.11.1



...全文
159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chiev 2001-11-05
  • 打赏
  • 举报
回复
谢谢励磁绕组的热心,我很感动,也让我坚定了学习的信心,耽误了大伙的宝贵时间,我也很惭愧.....再次感谢!!
yourway 2001-11-03
  • 打赏
  • 举报
回复
上一篇帖子有一点小小的问题,不好意思!
用sendmail发电子邮件时,to、from、subject这三行之间不要有空行,而在正文前要有一个空行,要这样:
To: $input{'email'}
From: aaaa\@bbbb.com
Subject: 您向名人堂提交的信息

姓名:$input{'name'}
……
yourway 2001-11-03
  • 打赏
  • 举报
回复
呵呵,来晚了。
第一个问题:将主程序中调用子程序的那一行:#&sendmail();的注视符号“#”去掉,然后给子程序sendmail()填入如下内容:

$sendmail_path="/usr/sbin/sendmail";
open (MAIL, "|$sendmail_path -t") || return 0;
select (MAIL);
print<<"EOF";
To: $input{'email'}

From: aaaa\@bbbb.com

Subject: 您向名人堂提交的信息


姓名:$input{'name'}
成绩:$input{'score'}
电子信箱:$input{'email'}
联系电话:$input{'telephone'}
联系地址:$input{'address'}
.
EOF
close(MAIL);
select (STDOUT);

说明:$sendmai_path是指明“sendmail”的路径。"From:"后面填你的电子信箱,不要丢了@ 前面的反协杠。不要丢了EOF前面一行的那个句点“.”。那个EOF要顶格写,前面不要有空格。
第二个问题:验证合法性可以只使用javascript,但那样不好,有安全漏洞,但只用perl来检查呢,又比较慢,所以最好的办法是javascript和perl结合起来用,对于友好的用户,可以很快的得到错误提示,对于非法用户,可以在perl的检查中将其拒之于外。
在perl里,你可以在调用保存资料的子程序&savedata();以前加入一个判断的语句,判断的条件嘛,就像小肯哥写的那样:
if ((length($input{'telephone'})>6)&&($input{'email'} =~ /^[\w¦-¦\.]+\@\w+(\.\w{2,3}){1,4}$/))
{
&savedata();
&sendmail();
&printend();
}else{
&printerroe();
}
然后定义一个sub 叫printerror()来显示用户的输入不合法。
用javascript的话就要修改printuserinfo()那个子程序
将前几行修改为如下内容:
sub printuserinfo () {
my $javascript='
<script language="JavaScript">
function check(){
var msg="";
if (document.info.telephone.value.length < 6) {
msg+="您输入的电话有误!\n\n";
}
var email_length=document.info.email.value.length;
var tab1=document.info.email.value.indexOf("@");
var domain=document.info.email.value.substring(tab1+1,email_length);

if(tab1==-1 || tab1==0 || domain.indexOf("@")!=-1 || domain.indexOf(".")==-1 || (domain.indexOf(".")+tab1+2)==email_length || email_length < 5) {
msg+="您输入的电子信箱有误!\n\n";
}

if (msg == "") {
return true;
}else{
alert(msg);
return false;
}
}
</script>
';

$score=getscore();
$cookie_bbb = cookie(-NAME=>'master',-VALUE=>'chiev'); #给回答正确地浏览器设置cookie #line 230
print header(-cookie=>[$cookie_bbb]); #line 231
&htmlhead("输入个人资料",$javascript);
print <<WE_ARE_FINISHED;
<BR>
<p>您的得分为$score,您已进入名人堂,请留名!</p>
<FORM METHOD="POST" NAME="info" onsubmit="return check();">

就是用javascript检查用户输入了。
第三个问题:你可以参考显示问卷的子程序自己编一下试试,如果不行,我再给你写。
的四个问题:修改printquestion()那个子程序,将print header();改为:
$visits = 0 if($visits eq "");
$visits++;
$cookie_visits = cookie(-NAME=>'visits',-VALUE=>"$visits",-EXPIRES=>'+3d');
print header(-cookie=>[$cookie_visits]);
然后在主程序中将&printquestion();修改为:
$visits = cookie('visits');
if ($visits < 3) then {
&printquestion();
}else{
&printlimit();
}
然后定义一个sub名为:printlimit()显示次数以满。


你可以从:
http://way.cqgele.com/bbb3.zip

http://way.cqgele.com/bbb3.exe
下载我修改的程序,也可以从
http://way.cqgele.com/cgi-bin/bbb3.cgi
查看效果。
netken 2001-11-03
  • 打赏
  • 举报
回复
1.找到 sendmail 路径
2. length($telephoneno) 得到电话号码长度
$email =~ /^[\w|-|\.]+\@\w+(\.\w{2,3}){1,4}$/;
3.从数据库里弄出信息,然后用 <table...>
4. print "set-cookie:....";

不好意思,虽然是磁力绕组的题目,不过俺看了手养,就先说了;)
d_k 2001-11-02
  • 打赏
  • 举报
回复
加点javascript
chiev 2001-11-02
  • 打赏
  • 举报
回复
如何在cgi中使用js?我不会//faint

2,203

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 CGI
社区管理员
  • CGI社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧