perl里面的语言中输入所有进入HTML FORM中的文本的语句是什么,我用
#!/bin/perl
#
&readparse;
print "Content-type: text/html\n\n";
就提示The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
Undefined subroutine &main::readparse called at D:\web\test2.cgi line 3.
的错误,不知道要怎么改。
我是从网上教程上弄下来的,应该没什么问题的,除非是教程有误,我想利用cgi获得html文件中所填的所有表单中的信息,要怎么做到啊?类似与留言板的东东,那位大侠赐教下??
------解决方案--------------------------------------------------------
呵呵,我也刚学不久。
问下&readparse;里是html文吧。如果是你这样改下,位置换下。
print "Content-type: text/html\n\n";
&readparse;
注意print "Content-type: text/html\n\n";下面必须要换2行,很重要,不换就会出错嘚。
第2种方法就是
print <<END;
Content-type: text/html;
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
(html文)
</html>
END
注意END下面必须换1行,否则也会出错哎。
应该是这样吧,希望能帮你解决点问题。
------解决方案--------------------------------------------------------
谢谢了,回去试试看先,我觉得空2行没必要呀,已经有2个\n了呀
还有,我用
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$buffer);
foreach $pair(@pairs){
($name,$value)=split(/=/,$pair);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$input_info{$name}=$value;
}
来处理但是只能处理其中表单中的其中一个,比如说有2个文本框,好像就只能获得其中一个输入的内容,另外一个就没有效果,也没有什么规律的,比如在html中我定义一个First Name <INPUT NAME="first" TYPE=TEXT SIZE=25><BR> 我用
$first=$value;
print "Your first name is $first<BR>";
这样显示是正常的
但是再加上一个Last Name <INPUT NAME="last" TYPE=TEXT SIZE=25><BR> 的话
我用$first=$value[0];
$last=$value[1];
print "Your first name is $first<BR>";
print "Your last name is $last<BR>";
就不能显示
如果吧变量赋值为$value的话,好像只能显示最后一个变量,如last,请教高手这个是什么原因,是我那里变量类型没有设置好吗?
------解决方案--------------------------------------------------------
不好意思 没看见print "Content-type: text/html\n\n";后面有\n\n...没注意哎。。
对了,你下面的value数组是提交后取得的吧?
如果是的话,把你提交那部分赋值发来看看。本人提交的一般全用hash数组接受的。
------解决方案--------------------------------------------------------
hash数组你是怎么用的呢?这个我不太清楚。还有你说的第2种方法具体是什么意思啊,貌似不是cgi的字符串处理语言啊,能解释一下吗?
------解决方案--------------------------------------------------------
提交的数值的话是这样的:比如我在html做了2个文本框一个name=first一个name=last用
$first=$value;
print "Your first name is $first <BR>";
处理的话的value是last的值
用数组的话就不显示变量值了,什么原因?
------解决方案--------------------------------------------------------
最近老眼昏花。。光看了下面没看上面?晕了。。
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
@pairs=split(/&/,$buffer);
foreach $pair(@pairs){
($name,$value)=split(/=/,$pair);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$input_info{$name}=$value;
}
红色的地方你改下$input_info{$name}.=$value;
而且也不是用$value来取,既然你用$input_info来接受。。。
引用
如果吧变量赋值为$value的话,好像只能显示最后一个变量
原因是你用$value来取的话,不就Last Name把你First Name那个给覆盖了。。。
所以取值应该用%input_info来取,不过你这方法还有点缺陷,key值没设,不知道指定哪个。。最好分开来。
这是我写的,可以参考下
sub parse_form {
my $buf;
if ($ENV{'REQUEST_METHOD'} eq "POST") {