一个急需高手回答的问题,急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!如果得不到正确答案便信心再学下去............

fyr000000 2004-10-14 12:06:22
#!c:/perl/bin/perl.exe
if($ENV{'REQUEST_METHOD'}eq"POST")
{
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
elsif($ENV{'REQUEST_METHOD'}eq"GET")
{
$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;
$name=~tr/+/ /;
$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

$FORM{$name}=$value;
}

#输出html档头
print"Content-type:text/html\n\n";

#输出html页面的开始部分
print<<END;
<html>
<head>
<title>用户留言板</title>
<meta http-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<h3>用户留言板</h3>
<hr>
</div>
END

#检察用户的输入
if($FORM{'name'}eq""){
print<<NAME;
<center>
对不起,请输入<b>您的姓名</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
NAME
exit;
}#end if

if($FORM{'E-mail'}eq""){
print<<E-MAIL;
<center>对不起,请输入<b>您的E-mail</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
E-MAIL
exit;
}#end if

if($FORM{'comment'}eq""){
print<<COMMENT;
<center>对不起,请输入<b>您的留言</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
COMMENT
exit;
}#end if

#把用户输入的回车换行转换为HTML中的换行
$FORM{'comment'}=~s^cM\n/<br>\n/g;

#把用户输入的空格转换为HTML中的空格
$FORM{'comment'}=~s/ / /g;

#获取当前时间
($sec,$min,$hour,$day,$mon,$year)=localtime(time);

#localtime函数获取的月份比实际月份少1,因此这里要加1
#年份比实际的年份少1900,因此这里要加1900
$mon++
$year=$year+1900;

$date="$year年$mon月$day日$hour时$min分$sec秒";

#产生一个0到1之间的随机数
srand;
$num=rand(1);

#指定保存留言的文件,注意用绝对路径
$filename="d:/abc/msg.html";

#以只读方式打开msg.html,读出原文中的所有数据。
open(FILE,"<$filename");
@old_content=<FILE>;
close(FILE);
#以覆盖的方式打开msg.html,写入最新的数据。
open(FILE,">$filename");
Print FILE<<MSG;
<p>
<b>我的姓名</b>:$FORM{'name'}
<br>
<b>我的e-mail</b>:<a href="mailto:$FORM{'E-mail'}">$FORM{'E-mail'}</a>
<br>
<b>我来自于</b>:$ENV{'REMOTE_ADDR'}
<br>
<b>留言时间</b>:$date
<br>
<b>我的留言如下</b>:
<br>
$FORM{'comment'}
</p>
<hr>
MSG

#写入原文件中的所有数据。
Print FILE"@old_content";

close(FILE);

#输出留言结束的页面
Print<<THANKS;
<p align="center">
感谢您在本站留言,
<a href="/guest.html"onClick=history.back()>请点这儿返回</a>。
</p>
<p align="center">
<a href="/msg.html?$num">看留言板</a>
</p>
THANKS
#输出页面结束标签
Print<<ENDHTML;
</body>
</html>
ENDHTML

#退出程序
exit




错误如下:





CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:


Can't find string terminator "E" anywhere before EOF at D:\abc\guest.pl line 53.


我已经从头到底看了两遍代码,麻烦大家帮我看看,错在哪里???


...全文
113 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
522jack 2004-10-20
  • 打赏
  • 举报
回复
up
fyr000000 2004-10-20
  • 打赏
  • 举报
回复
yourway(勵磁繞組,還未娶妻(至少我曾經瘦過))

我试出来了,以后多交流!!!!
我的QQ号:185635983
我的邮箱:fyr000000@163.com
QQ群:4679938 欢迎来讨论!!!!
yourway 2004-10-19
  • 打赏
  • 举报
回复
$filename="http://localhost/web/msg.html";
应该是:
$filename="C:\\inetpub\\wwwroot\\web\\msg.html";
是你的文件于硬盘上的绝对路径。
yourway 2004-10-19
  • 打赏
  • 举报
回复
#!c:/perl/bin/perl.exe
if($ENV{'REQUEST_METHOD'}eq"POST")
{
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
elsif($ENV{'REQUEST_METHOD'}eq"GET")
{
$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;
$name=~tr/+/ /;
$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

$FORM{$name}=$value;
}

#输出html档头
print"Content-type:text/html\n\n";

#输出html页面的开始部分
print<<END;
<html>
<head>
<title>用户留言板</title>
<meta http-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<h3>用户留言板</h3>
<hr>
</div>
END

#检察用户的输入
if($FORM{'name'}eq""){
print<<NAME;
<center>
对不起,请输入<b>您的姓名</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
NAME
exit;
}#end if

if($FORM{'E-mail'}eq""){
print<<EMAIL;
<center>对不起,请输入<b>您的E-mail</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
EMAIL
exit;
}#end if

if($FORM{'comment'}eq""){
print<<COMMENT;
<center>对不起,请输入<b>您的留言</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
COMMENT
exit;
}#end if

#把用户输入的回车换行转换为HTML中的换行
$FORM{'comment'}=~s/\cM\n/<br>\n/g;

#把用户输入的空格转换为HTML中的空格
$FORM{'comment'}=~s/ / /g;

#获取当前时间
($sec,$min,$hour,$day,$mon,$year)=localtime(time);

#localtime函数获取的月份比实际月份少1,因此这里要加1
#年份比实际的年份少1900,因此这里要加1900
$mon++;
$year=$year+1900;

$date="$year年$mon月$day日$hour时$min分$sec秒";

#产生一个0到1之间的随机数
srand;
$num=rand(1);

#指定保存留言的文件,注意用绝对路径
$filename="D:\\field\\apache2\\htdocs\\msg.html";

#以只读方式打开msg.html,读出原文中的所有数据。
open(FILE,"<$filename");
@old_content=<FILE>;
close(FILE);
#以覆盖的方式打开msg.html,写入最新的数据。
open(FILE,">$filename");
print FILE<<MSG;
<p>
<b>我的姓名</b>:$FORM{'name'}
<br>
<b>我的e-mail</b>:<a href="mailto:$FORM{'E-mail'}">$FORM{'E-mail'}</a>
<br>
<b>我来自于</b>:$ENV{'REMOTE_ADDR'}
<br>
<b>留言时间</b>:$date
<br>
<b>我的留言如下</b>:
<br>
$FORM{'comment'}
</p>
<hr>
MSG

#写入原文件中的所有数据。
print FILE"@old_content";

close(FILE);

#输出留言结束的页面
print<<THANKS;
<p align="center">
感谢您在本站留言,
<a href="/guest.html"onClick=history.back()>请点这儿返回</a>。
</p>
<p align="center">
<a href="/msg.html?$num">看留言板</a>
</p>
THANKS
#输出页面结束标签
print<<ENDHTML;
</body>
</html>
ENDHTML

#退出程序
exit;

fyr000000 2004-10-19
  • 打赏
  • 举报
回复
还是没用啊,你帮我试试,yourway(勵磁繞組,還未娶妻(至少我曾經瘦過)) ,谢谢!!!!!!!!!!!!!!!!!
fyr000000 2004-10-18
  • 打赏
  • 举报
回复
<!--文件名为guest.html-->
<html>
<head>
<title>用户留言板</title>
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<h2 align="center">用户留言板</h2>
<form action="http://localhost/web/guestbook.pl" method="post">
<p>您的姓名:
<input type="text" name="name">
<p>您的E-Mail:
<input type="text" name="E-mail">
<p>您的留言:
<p>
<textarea rows="7" cols="50" name="comment">
</textarea>
<p>
<input type="submit" name="Submit" value="提交资料">
<input type="reset" name="reset" value="重新填写">
</form>
</body>
</html>
















#!c:/perl/bin/perl.exe
if($ENV{'REQUEST_METHOD'}eq"POST")
{
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
}
elsif($ENV{'REQUEST_METHOD'}eq"GET")
{
$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;
$name=~tr/+/ /;
$name=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;

$FORM{$name}=$value;
}

#输出html档头
print"Content-type:text/html\n\n";

#输出html页面的开始部分
print<<END;
<html>
<head>
<title>用户留言板</title>
<meta http-equiv="Content-Type"content="text/html;charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<div align="center">
<h3>用户留言板</h3>
<hr>
</div>
END

#检察用户的输入
if($FORM{'name'}eq""){
print<<NAME;
<center>
对不起,请输入<b>您的姓名</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
NAME
exit;
}#end if

if($FORM{'E-mail'}eq""){
print<<EMAIL;
<center>对不起,请输入<b>您的E-mail</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
EMAIL
exit;
}#end if

if($FORM{'comment'}eq""){
print<<COMMENT;
<center>对不起,请输入<b>您的留言</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
COMMENT
exit;
}#end if

#把用户输入的回车换行转换为HTML中的换行
$FORM{'comment'}=~s/\cM\n/<br>\n/g;

#把用户输入的空格转换为HTML中的空格
$FORM{'comment'}=~s/ / /g;

#获取当前时间
($sec,$min,$hour,$day,$mon,$year)=localtime(time);

#localtime函数获取的月份比实际月份少1,因此这里要加1
#年份比实际的年份少1900,因此这里要加1900
$mon++;
$year=$year+1900;

$date="$year年$mon月$day日$hour时$min分$sec秒";

#产生一个0到1之间的随机数
srand;
$num=rand(1);

#指定保存留言的文件,注意用绝对路径
$filename="http://localhost/web/msg.html";

#以只读方式打开msg.html,读出原文中的所有数据。
open(FILE,"<$filename");
@old_content=<FILE>;
close(FILE);
#以覆盖的方式打开msg.html,写入最新的数据。
open(FILE,">$filename");
Print FILE<<MSG;
<p>
<b>我的姓名</b>:$FORM{'name'}
<br>
<b>我的e-mail</b>:<a href="mailto:$FORM{'E-mail'}">$FORM{'E-mail'}</a>
<br>
<b>我来自于</b>:$ENV{'REMOTE_ADDR'}
<br>
<b>留言时间</b>:$date
<br>
<b>我的留言如下</b>:
<br>
$FORM{'comment'}
</p>
<hr>
MSG

#写入原文件中的所有数据。
Print FILE"@old_content";

close(FILE);

#输出留言结束的页面
print<<THANKS;
<p align="center">
感谢您在本站留言,
<a href="/guest.html"onClick=history.back()>请点这儿返回</a>。
</p>
<p align="center">
<a href="/msg.html?$num">看留言板</a>
</p>
THANKS
#输出页面结束标签
print<<ENDHTML;
</body>
</html>
ENDHTML

#退出程序
exit















我把三个文件放在同一个虚拟目录下了,但是提交表单后出来的网页显示的留言等信息都为空, yourway(勵磁繞組,還未娶妻(至少我曾經瘦過)) 知道错在哪里吗????
yourway 2004-10-17
  • 打赏
  • 举报
回复
$FORM{'comment'}=~s/\n/<br>\n/g;
fyr000000 2004-10-15
  • 打赏
  • 举报
回复
yourway(勵磁繞組,還未娶妻(至少我曾經瘦過))
你回的$FORM{'comment'}=~s^cM\n/<br>\n/g;
少了一个“/”
我不知道少在哪里,请指点.................................
顺便说一句,我其实只是一个初学者,学这东西是因为学校学这个,我的主攻方向是VC++,以后多交流.
不过我现在还是个菜鸟!!!!
希望你能点播一下,那个“/”到底错在哪里???

yourway 2004-10-15
  • 打赏
  • 举报
回复
你的程序中的错误如下:

1、不要在块输出的指示字符串中使用减号(或者说你认为它是连字符,但是perl认为它是减号)“-”
print<<EMAIL;
<center>对不起,请输入<b>您的E-mail</b>!
<a href="/guest.html"onClick=history.back()>点这儿返回</a>。
</center>
EMAIL

2、少了一个“/”仔细看看。
$FORM{'comment'}=~s^cM\n/<br>\n/g;

3、记得每一个语句结束都应该用“;”
#localtime函数获取的月份比实际月份少1,因此这里要加1
#年份比实际的年份少1900,因此这里要加1900
$mon++
$year=$year+1900;

#退出程序
exit

4、注意perl是区分大小写的(因为unix系统是区分大小写的,大多数源自unix的工具都要区分大小写,包括C语言)
Print?
print?

写完代码以后根据系统的错误提示认真的检查一下!!
如果你连这点耐心都没有,那你能在这个领域里走多远呢?


TobyLee 2004-10-15
  • 打赏
  • 举报
回复
你把这一行print <<END;改成print <<"END";试一下,不过要记住,下面对应的那个END一定要单独写一行,而且这一行只能有END,前面不可以有空格。
limlzm 2004-10-14
  • 打赏
  • 举报
回复
你在bin下打./perl 出现什么?不是在网页上运行
相关推荐
发帖
CGI

2203

社区成员

Web 开发 CGI
社区管理员
  • CGI社区
加入社区
帖子事件
创建了帖子
2004-10-14 12:06
社区公告
暂无公告