perl cgi无法从php复选框数组中打印元素

时间:2012-07-25 23:13:36

标签: php perl cgi

我有一个HTML表单,它将复选框值作为数组发送到Perl CGI脚本。但是,由于该站点主要使用PHP重建,因此复选框数组的处理方式不同。我有一个返回表单的PHP函数。它看起来像这样:

<td>Profiles: </td>
<td><input type=\"checkbox\" value=\"oneconnect\" name=\"v1-profile[]\">OneConnect <br />
<input type=\"checkbox\" value=\"http\" name=\"v1-profile[]\">HTTP <br />
<input type=\"checkbox\" value=\"xforwardedfor\" name=\"v1-profile[]\">Xforwarded-for</td>
</tr>

然后我将它发送到Perl CGI脚本

use CGI qw(:standard);
my $q = new CGI;
my @profiles1 = $q->param("v1-profile");

当我尝试打印数组的元素时,我只看到“Array”这个词作为输出。

foreach my $r (@profiles1) {
print "$r\n";
}

我也尝试了一些不起作用的东西。

foreach my $r (@profiles1) {
foreach my $v (@$r) {
print "$v\n";
}
}

我如何访问“@ profiles1”数组的元素?谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

变量名上的尾随[]是PHP-ism - 它不是标准的,并且不受Perl的CGI模块(或者除了PHP以外的任何其他东西)的特殊处理。如果可以,请从表单中删除它。如果没有,您应该能够通过在名称中包含括号来获取Perl中的参数:

my @profiles = $q->param("v1-profile[]");

答案 1 :(得分:1)

不确定您的问题是什么。它对我来说似乎很好。这是我建造的小型试验台。

的test.html:

<html>
  <head>
    <title>Test</title>
  </head>
  <body>
    <h1>Test</h1>
    <form action="/cgi-bin/form">
      <table>
        <tr>
          <td>Profiles: </td>
          <td><input type="checkbox" value="oneconnect" name="v1-profile[]">OneConnect <br />
          <input type="checkbox" value="http" name="v1-profile[]">HTTP <br />
          <input type="checkbox" value="xforwardedfor" name="v1-profile[]">Xforwarded-for<br />
          <input type="submit"></td>
        </tr>
      </table>
    </form>
  </body>
</html>

的cgi-bin /形式:

#!/usr/bin/perl

use strict;
use warnings;
use CGI;

my $q = CGI->new;

print $q->header(-type => 'text/plain');

my @profiles = $q->param('v1-profile[]');

foreach (@profiles) {
  print "$_\n";
}

我完全看到了我的期望。我检查的每个复选框都显示在输出中。

要检查的一件事。提交表单后,您的网址是什么样的?我看起来像这样(选中了两个复选框)。

http://localhost/cgi-bin/form?v1-profile%5B%5D=oneconnect&v1-profile%5B%5D=xforwardedfor

请注意,输入名称中的方括号已经过URL编码。这应该是什么。

所以问题是,这与你的设置有何不同?