forms - 如何在 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];
}
解决方案
您的代码中有一些明显的问题。
- 您
==
在尝试进行字符串比较时使用。改为使用eq
。 - 你的
if
语法是错误的。在 Perl 中,您需要使用大括号 -if (...) { ... }
。 - 您明确要求复选框数组中的第一个元素。您需要
@{ $POST->{sections} }
获取所有值。
所以,总而言之,你的子程序应该看起来像这样:
sub post
{
if ($id1 eq 'active') {
my @sections = @{ $POST->{sections} };
# Do something else with @sections
}
}
另外,我希望您在 2019 年认真重新考虑使用 CGI。请阅读CGI::Alternatives并考虑使用更现代的技术。
推荐阅读
- javascript - 通过 Telegram Bot 发送图像
- python - PyLint 在 shutil.rmtree(...) 的错误处理函数中引发“misplaced-bare-raise”
- go - 什么纬度/经度组合会产生负 geohash 整数?
- angular - 反应形式 Angular formGroup
- android-source - 如何升级现有 AOSP ROM 的 Android 版本?
- javascript - 否定集中的字符 - 当没有被两个特定字符包围时排除
- windows - 批处理文件以交叉引用大小并重命名 1300 个丢失名称的文件
- python - 使用 Google Apps 脚本的考勤系统
- ruby - 带有Ruby的Windows上的Git Bash:在打印提示之前等待gets()输入?
- json - Xamarin Forms - 从 RestAPI 加载 JSON 的最佳实践