如何将变量从HTML表单传递给perl cgi脚本?

时间:2013-05-04 19:38:53

标签: html perl cgi

我想使用HTML表单将变量传递给Perl CGI脚本,以便我可以处理该变量,然后将其打印到另一个HTML页面上。

以下是我的HTML代码:http://jsfiddle.net/wTVQ5/

这是我链接HTML的Perl CGI脚本。这是我想要这样做的方式(因为它使用更少的行并且可能更有效)。

#!/usr/bin/perl
use warnings; use strict;
use CGI qw( :standard);
my $query = CGI->new;

# Process an HTTP request
my $user = $query->param('first_name');

# process $user... for example:
my $foo = "Foo";
my $str = $user . $foo;

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $str - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

这是我从tutorial读取的一种方式,对我来说更有意义:

#!/usr/bin/perl
use warnings; use strict;

my ($buffer, @pairs, $pair, $name, $value, %FORM);
# Read in text
$ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
   read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else {
   $buffer = $ENV{'QUERY_STRING'};
}
# Split information into name/value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
    ($name, $value) = split(/=/, $pair);
    $value =~ tr/+/ /;
    $value =~ s/%(..)/pack("C", hex($1))/eg;
    $FORM{$name} = $value;
}
my $user = $FORM{first_name};

# process $user... for example:
my $foo = "Foo";
my $str = $user . $foo;

print "Content-type:text/html\r\n\r\n";
print "<html>";
print "<head>";
print "<title>Hello - Second CGI Program</title>";
print "</head>";
print "<body>";
print "<h2>Hello $str - Second CGI Program</h2>";
print "</body>";
print "</html>";

1;

这两个都不能正常工作BTW。当我点击HTML页面上的提交按钮时,它只是将我链接到脚本而不是传递变量,处理它,并打印出HTML页面。

3 个答案:

答案 0 :(得分:1)

这一行:

print "Content-type:text/html\r\n\r\n";

应该是:

print "Content-type:text/html\n\n";

或更好:

print $query->header;

另外,请确保您的Web服务器已针对CGI进行了良好配置。而且,如果你有足够的时间,使用现代的Web应用程序方法,有许多框架可能比CGI(Dancer,Mojolicious,OX,...)更好

答案 1 :(得分:1)

我看到你使用CGI'标准',不需要真正发起CGI-&gt; new,除非你只是想,也说你少说道,你可以做这样的事情。

use strict;
use warnings;
use CGI qw( :standard );

my $user = param('first_name') || q/foo/;

print header, 
      start_html(-title => 'Hello'), h1('Hello ' . $user), end_html;

答案 2 :(得分:1)

您需要使用类似的东西编辑httpd.conf。

AddHandler cgi-script cgi pl
<Directory /path/to/cgi/files>
Options +ExecCGI
</Directory>

如果您在本地运行此操作,则可以在主目录结构中创建名为 public_html 的文件夹,并将其设置为运行脚本,您只需将其配置为将其映射到该位置即可。