1

我有一个 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");

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

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

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

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

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

4

2 回答 2

2

变量名的结尾[]是 PHP 主义——它不是标准的,并且没有被 Perl 的 CGI 模块(或 PHP 以外的任何东西,真的)特别对待。如果可以,请将其从表单中删除。如果没有,您应该能够通过在名称中包含括号来从 Perl 获取参数:

my @profiles = $q->param("v1-profile[]");
于 2012-07-25T23:17:26.263 回答
1

不确定你的问题是什么。这对我来说似乎工作得很好。这是我建造的小试验台。

测试.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";
}

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

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

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

请注意,输入名称中的方括号已经过 URL 编码。这就是应该发生的事情。

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

于 2012-07-26T08:43:53.193 回答