我有一个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”数组的元素?谢谢你的帮助!
答案 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编码。这应该是什么。
所以问题是,这与你的设置有何不同?