如何使用 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-&gt;param('location');; 会产生警告(即使没有使用严格;使用警告;`)? 【参考方案1】:

$query-&gt;param('location') 在标量上下文中不会返回对数组的引用,因此您尝试取消引用它是没有意义的,Perl 会告诉您,如果您一直使用 use strict; use warnings;,那么您应该一直这样做。

正如你所注意到的,$query-&gt;param('location') 在列表上下文中返回所有值,所以你想要

join(",", $query->param('location'))

当然,你的工作 sn-p 和这个都会产生以下警告:

在 -e 第 1 行的列表上下文中调用 CGI::param,这可能会导致漏洞。请参阅“获取单个命名参数的一个或多个值”中的警告

正如文档中引用的部分所述,您应该在列表上下文中使用 -&gt;multi_param 而不是 -&gt;param

join(",", $query->multi_param('location'))

【讨论】:

我使用此选项的唯一问题是它只收集两个值之后我收到错误“DBI 报价:无效的参数数量:得到句柄 + 3,预期句柄 + 介于 1 和2" 知道为什么 此答案回答了您的问题。如果您需要帮助修复 DBI 代码中的错误,请随时提出新问题。但这次做得更好;这个问题提出了一些不真实的说法。 (请参阅答案的 cmets。)

以上是关于如何使用 CGI.pm 获取选中复选框的列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在asp.net中查找复选框列表是不是被选中

如何检索名称 | Listview中多个选中项目的值对?

即使未从 HTML 检查到 PHP,如何获取所有复选框变量?

如何获取单击的选中按钮的视图位置以及如何根据其位置将其设置为选中状态

如何遍历复选框列表并找到已选中和未选中的内容?

如何在反应中选中/取消选中复选框列表