如何使用 CGI.pm 获取选中复选框的列表?
Posted
技术标签:
【中文标题】如何使用 CGI.pm 获取选中复选框的列表?【英文标题】:How can I get the list of checked checkboxes using CGI.pm? 【发布时间】:2021-07-01 18:50:11 【问题描述】:我有一个带有多个复选框的表单。用户可以根据需要选择任意数量的位置,我试图将它们全部保存在一个数组中。我已经尝试了以下选项但不起作用:
<input class="form-check-input" type="checkbox" value="Location 1" name="location">
<input class="form-check-input" type="checkbox" value="Location 2" name="location">
<input class="form-check-input" type="checkbox" value="Location 3" name="location">
my @location = $query->param('location');;
上面这行代码获取了所有的位置,但是没有用逗号隔开,我也试过下面的,但是什么都没有;
my $location = join(",", @ $query->param('location'); );
【问题讨论】:
您是否尝试过在名称上使用括号?name="location[]"
否则将使用名称的最后一个元素。
您发布的代码甚至无法编译。说你“没有得到任何东西”有点不诚实,因为你会收到错误消息。
总是使用use strict; use warnings;
。
最后,你为什么不提my @location = $query->param('location');;
会产生警告(即使没有使用严格;使用警告;`)?
【参考方案1】:
$query->param('location')
在标量上下文中不会返回对数组的引用,因此您尝试取消引用它是没有意义的,Perl 会告诉您,如果您一直使用 use strict; use warnings;
,那么您应该一直这样做。
正如你所注意到的,$query->param('location')
在列表上下文中返回所有值,所以你想要
join(",", $query->param('location'))
当然,你的工作 sn-p 和这个都会产生以下警告:
在 -e 第 1 行的列表上下文中调用 CGI::param,这可能会导致漏洞。请参阅“获取单个命名参数的一个或多个值”中的警告
正如文档中引用的部分所述,您应该在列表上下文中使用 ->multi_param
而不是 ->param
。
join(",", $query->multi_param('location'))
【讨论】:
我使用此选项的唯一问题是它只收集两个值之后我收到错误“DBI 报价:无效的参数数量:得到句柄 + 3,预期句柄 + 介于 1 和2" 知道为什么 此答案回答了您的问题。如果您需要帮助修复 DBI 代码中的错误,请随时提出新问题。但这次做得更好;这个问题提出了一些不真实的说法。 (请参阅答案的 cmets。)以上是关于如何使用 CGI.pm 获取选中复选框的列表?的主要内容,如果未能解决你的问题,请参考以下文章
即使未从 HTML 检查到 PHP,如何获取所有复选框变量?