Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache perl CGI参数并非全部显示_Apache_Perl - Fatal编程技术网

Apache perl CGI参数并非全部显示

Apache perl CGI参数并非全部显示,apache,perl,Apache,Perl,我正在将大约七个字段从HTML表单传递到Perl CGI脚本 使用各种方法(POST、GET、CGI.pm或原始代码)无法恢复某些值 就是这个代码 my $variable = $q->param('varname'); 导致大约一半的变量为空或未定义,尽管后者可能是使用JavaScript的HTML页面的巧合 我在同一个平台上编写了一个测试页面,将一个简单的表单转换为一个简单的CGI,并在其中得到了onpy一半参数的结果。赋值后剩余值为空 我试过了POST和GET。在尝试写出变量之后,

我正在将大约七个字段从HTML表单传递到Perl CGI脚本

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

就是这个代码

my $variable = $q->param('varname');
导致大约一半的变量为空或未定义,尽管后者可能是使用JavaScript的HTML页面的巧合

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

我试过了POST和GET。在尝试写出变量之后,我还尝试获取并打印查询字符串;一切都在查询字符串中。我正在为此使用
CGI.pm

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

CGI=HASH(0x02033)->param('qSetName')
建议这些值的赋值会导致某种类型的转换,因此我无法判断它们是否真正“包含”了正确的值

我的真实表单使用POST,所以我只是注释掉了
CGI.pm
代码,并在STDIN上迭代,它拥有它应该拥有的所有名称-值对

我所做的一切都指向
CGI.pm
,因此我将尝试重新安装它

以下是遗漏了一半变量的测试代码:

#!/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";
我尝试合并池上的代码

%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";
%name=(
seqNum=>“seqNum”,
uName=>“用户名”,
qSetName=>“setName”,
accessLevel=>“accessLevel”,
qSetCat=>“类别”,
qTopicName=>“主题”,
qSetType=>type',
qSetSubject=>subject,
);
使用CGI;
my$cgi=cgi->new();
打印“内容类型:text/html\n\n”;
#打印($cgi->标题('text/plain'));
对于我的$name($cgi->param){
对于($cgi->param($name)){
#打印(“$name:”(已定义($\u)?$\u:“[undef]”)。“\n”);
打印“$NAMES{$name}=$\n”;
${$NAMES{$name}}=$\;
}
}
打印“\n测试CGI\n\n\n以下是变量:\n”;
打印“Hello World!\n”;
打印“\n”;
打印“
  • \$q->param(\'qSetSubject\')=$subject\n”; 打印“
  • \$q->param(\'qTopicName\')=$topic\n”; 打印“
  • \$q->param(\'uName\')=$userName\n”; 打印“
  • \$q->param(\'qSetCat\')=$accessLevel\n”; 打印“
  • \$q->param(\'qSetType\')=$category\n”; 打印“
  • \$q->param(\'accessLevel\')=$type\n”; 打印“\n”;
  • 您正在接收

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

    应替换为

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

    你太不精确了。请添加到脚本的顶部,提供输出,并提供所需的输出您应该在何时执行
    打印$q->param('variable')。(不要把Perl代码放在引号里!)很抱歉,我没有意识到我在这篇文章的错误部分。Anway,perl不应该用双引号插入变量吗?Ikegami,我用了你的代码,所有变量都显示出来了。但我不知道为什么。你也应该避免使用符号引用
    ${$NAMES{$name}
    取消对符号引用的引用,因为
    $NAMES{$name}
    是一个简单的字符串--变量的名称。这是非常糟糕的做法,通常的解决方案是使用散列。阅读中的符号引用。您还应该确保在您编写的每个Perl程序的顶部放置
    use strict
    use warnings'all'
    。你还需要声明所有变量,尽可能接近它们的第一个使用点。你说我收到的是我从你的代码中收到的,不是我的。我还使用$q->param('qSetCat')等等。也许你正在看我用来帮助我合并代码的哈希。我用它为我的变量名构造符号引用,这是一个较短的路由,然后检查$q->param()中的每个值。还在啄食这个。。。。当我得到它时,我肯定会发布一个明确的答案。Re“是我从你的代码中得到的”,我知道是我写的。我不知道你为什么提到这件事。谁写的不重要。重要的是,它显示了你收到的信息关于“我正在使用
    $q->param('qSetCat')
    等等”,我知道。就像我说的,你不应该这样。这就是你所犯错误的原因。您应该改用
    $q->param('qSetCat')
    ,因为该参数名为
    category
    ,而不是
    qSetCat
    。对此线程表示歉意…几年后,我回到一个编码项目,数千行代码和30个左右不同的文件中出现了一些名称/变量不匹配,这是造成我问题的主要原因。这不是一个问题,而是几个问题。还有,a=应该存在的地方==。我终于找到了他们。我感谢你的帮助
    my $category    = $q->param('qSetCat');
    my $type        = $q->param('qSetType');
    
    my $category    = $q->param('category');
    my $type        = $q->param('type');