我将大约七个字段从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";
答案 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');