perl CGI参数并未全部显示

时间:2016-11-22 18:09:51

标签: apache perl

我将大约七个字段从HTML表单传递给Perl CGI脚本。

使用各种方法(POST,GET,CGI.pm或原始代码)无法恢复某些值。

即,此代码

my $variable = $q->param('varname');

导致大约一半的变量是 undef ,尽管后者可能是使用JavaScript的HTML页面的巧合情况。

我在同一平台上编写了一个测试页面,其中一个简单的表单转到了一个简单的CGI,并且还得到了表示一半参数的结果。分配后剩余的值为空。

我尝试了POST和GET。在尝试写出变量后,我也尝试了GET并打印了查询字符串;一切都在查询字符串中,因为它应该是。我正在使用CGI.pm

我试图通过创建我的测试CGI代码版本来查看CGI.pm是否成功解析了变量值,该代码只显示了 HTML页面上的参数。结果是一堆奇怪的字符串,如

CGI=HASH(0x02033)->param('qSetName')

建议分配这些值导致某种类型的演员表,所以我无法判断他们是否真的包含了'正确的价值观。

我的真实表单使用POST,所以我只是注释了CGI.pm代码并迭代了STDIN并且它具有所有的名称 - 值对。

我所做的一切都指向CGI.pm,所以我会尝试重新安装。

这里是错过了一半vars的测试代码:

#!/usr/bin/perl;

use CGI;

my $q = new CGI;

my $subject     = $q->param('qSetSubject');
my $topic       = $q->param('qTopicName');
my $userName    = $q->param('uName');
my $accessLevel = $q->param('accessLevel');
my $category    = $q->param('qSetCat');
my $type        = $q->param('qSetType');


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

print "<html>\n<head><title>Test CGI<\/title><\/head>\n<body>\n\n<h2>Here Are The Variables:<\/h2>\n";

print "<list>\n";
print "<li>\$q->param(\'qSetSubject\') = $subject\n";
print "<li>\$q->param(\'qTopicName\')  = $topic\n";
print "<li>\$q->param(\'uName\')       = $userName\n";
print "<li>\$q->param(\'qSetCat\')     = $accessLevel\n";
print "<li>\$q->param(\'qSetType\')    = $category\n";
print "<li>\$q->param(\'accessLevel\') = $type\n";
print "<\/list>\n";

ikegami的代码的结果在这里:

qSetSubject: precalculus
qTopicName: polar coordinates
uName: kjtruitt
accessLevel: private
category: mathematics
type: grid-in

我尝试合并ikegami的代码

%NAMES = (
        seqNum => 'seqNum',
        uName  => 'userName',
        qSetName => 'setName',
        accessLevel => 'accessLevel',
        qSetCat => 'category',
        qTopicName => 'topic',
        qSetType => 'type',
        qSetSubject => 'subject',

);

   use CGI;
   my $cgi = CGI->new();
   print "Content-Type:text/html\n\n";

   #print($cgi->header('text/plain'));
   for my $name ($cgi->param) {
      for ($cgi->param($name)) {
         #print("$name: ".( defined($_) ? $_ : '[undef]' )."\n");
         print "$NAMES{$name} = $_\n";
         ${$NAMES{$name}} = $_;
      }
   }

print "<html>\n<head><title>Test CGI<\/title><\/head>\n<body>\n\n<h2>Here Are The Variables:<\/h2>\n";

print "Hello World!\n";

print "<list>\n";
print "<li>\$q->param(\'qSetSubject\') = $subject\n";
print "<li>\$q->param(\'qTopicName\')  = $topic\n";
print "<li>\$q->param(\'uName\')       = $userName\n";
print "<li>\$q->param(\'qSetCat\')     = $accessLevel\n";
print "<li>\$q->param(\'qSetType\')    = $category\n";
print "<li>\$q->param(\'accessLevel\') = $type\n";
print "<\/list>\n";

1 个答案:

答案 0 :(得分:0)

您正在接收

qSetSubject: precalculus
qTopicName: polar coordinates
uName: kjtruitt
accessLevel: private
category: mathematics
type: grid-in

所以

my $category    = $q->param('qSetCat');
my $type        = $q->param('qSetType');

应替换为

my $category    = $q->param('category');
my $type        = $q->param('type');