处理发送作为阵列POST数据

问题描述 投票:0回答:2

我有发送一个隐藏字段,并用相同的名称的单选按钮的HTML表单。

这让人们提交表单,而不从列表中选择(但记录了零的答案)。

当用户执行选择的无线按钮,表单帖BOTH隐藏值和所选择的值。

我想编写一个Perl函数来POST数据转换成一个哈希值。标准文本框等。以下作品

#!/usr/bin/perl
use CGI qw(:standard);
sub GetForm{
    %form;
    foreach my $p (param()) {
         $form{$p} = param($p); 
    }
    return %form;
}   

然而,当具有相同名称面临两种形式输入它只是返回的第一个(即,隐藏一个)

我可以看到,输入包括在后头部为数组,但我不知道如何处理它们。

我与旧代码工作,所以我不能改变不幸的形式!

有没有办法做到这一点?

perl cgi
2个回答
3
投票

我有发送一个隐藏字段,并用相同的名称的单选按钮的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记录在案。

所以,你应该迁移从这个反正路程。


0
投票

更换

$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
© www.soinside.com 2019 - 2024. All rights reserved.