首页 > 解决方案 > 如何在 PERL-CGI 中读取多个复选框

问题描述

我有一个有多个复选框的表单(所有都适用),我正在尝试读取所有选择的值..用户单击提交它会重新加载页面并检查“发布”,如果是新条目.. ..但它只读取选择的第一个值,我不知道我做错了什么;/

<label class="checkbox-inline"><input type="checkbox" name="sections" value="Cars">Cars</label>
<label class="checkbox-inline"><input type="checkbox" name="sections" value="Trucks">Trucks</label>
<label class="checkbox-inline"><input type="checkbox" name="sections" value="Airplanes">Airplanes</label>
<label class="checkbox-inline"><input type="checkbox" name="sections" value="Cell Phones">Cell Phones</label> 

sub post
{ 
  if($id1 == 'active')
  my @sections = $POST->{sections}->[0];

}

标签: formsperlcgi

解决方案


您的代码中有一些明显的问题。

  1. ==在尝试进行字符串比较时使用。改为使用eq
  2. 你的if语法是错误的。在 Perl 中,您需要使用大括号 - if (...) { ... }
  3. 您明确要求复选框数组中的第一个元素。您需要@{ $POST->{sections} }获取所有值。

所以,总而言之,你的子程序应该看起来像这样:

sub post
{ 
  if ($id1 eq 'active') {
    my @sections = @{ $POST->{sections} };
    # Do something else with @sections
  }
}

另外,我希望您在 2019 年认真重新考虑使用 CGI。请阅读CGI::Alternatives并考虑使用更现代的技术。


推荐阅读