我有发送一个隐藏字段,并用相同的名称的单选按钮的HTML表单。
这让人们提交表单,而不从列表中选择(但记录了零的答案)。
当用户执行选择的无线按钮,表单帖BOTH隐藏值和所选择的值。
我想编写一个Perl函数来POST数据转换成一个哈希值。标准文本框等。以下作品
#!/usr/bin/perl
use CGI qw(:standard);
sub GetForm{
%form;
foreach my $p (param()) {
$form{$p} = param($p);
}
return %form;
}
然而,当具有相同名称面临两种形式输入它只是返回的第一个(即,隐藏一个)
我可以看到,输入包括在后头部为数组,但我不知道如何处理它们。
我与旧代码工作,所以我不能改变不幸的形式!
有没有办法做到这一点?
我有发送一个隐藏字段,并用相同的名称的单选按钮的HTML表单。
这让人们提交表单,而不从列表中选择(但记录了零的答案)。
这是一个奇怪的做法。它会更容易出离开隐藏的输入和治疗缺乏数据作为零的答案。
但是,如果你要坚持你的方法,阅读the CGI module的文档。
具体而言,documentation for param:
当调用参数()如果该参数是多值(例如,从多个选项中滚动列表),你可以要求接收阵列。否则,该方法将返回第一个值。
从而:
$form{$p} = [ param($p) ];
但是,你似乎是重新发明轮子。有一个built-in method to get a hash of all paramaters:
$form = $CGI->new->Vars
这就是说,文档还指出:
CGI.pm不再被认为是用于开发Web应用程序,包括快速原型和小网页脚本很好的做法。有更好,更清洁,更快捷,更方便,更安全,更可扩展性,更具扩展性,更现代的可在这个时间点的选择。这些将与CGI::Alternatives记录在案。
所以,你应该迁移从这个反正路程。
更换
$form{$p} = param($p); # Value of first field named $p
同
$form{$p} = ( multi_param($p) )[-1]; # Value of last field named $p
要么
$form{$p} = ( grep length, multi_param($p) )[-1]; # Value of last field named $p
# that has a non-blank value