当前位置: 代码迷 >> CGI >> 用perl些cgi做网页的有关问题,小弟新手,来问个很菜的有关问题
  详细解决方案

用perl些cgi做网页的有关问题,小弟新手,来问个很菜的有关问题

热度:5262   发布时间:2013-02-26 00:00:00.0
用perl些cgi做网页的问题,小弟新手,来问个很菜的问题
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") {