PHP多复选框对应输入框非空验证问题求助
解决表单验证问题:选中杂志后未填数量的错误提示
嘿,我看到你卡在这个表单验证的问题上了,别慌,咱们先把问题拆开来看看——你的核心逻辑有个小漏洞,这才导致错误提示出不来~
你原来代码的问题所在
你把检查选中杂志数量的循环放在了empty($_POST["MAG"])的判断里,这就意味着:只有当用户完全没选任何杂志的时候,才会进入这个循环。但这时候$_POST['MAG']是空的,循环根本不会执行,那些检查数量的代码自然就跑不起来啦!
修正后的代码逻辑
咱们调整一下顺序:先判断用户有没有提交表单,然后先检查是否选中了杂志;如果选中了,再逐个检查对应杂志的数量是否填写。另外,咱们可以用一个关联数组把杂志和对应的数量字段名绑定起来,这样代码更简洁,以后加新杂志也方便。
下面是修正后的完整代码:
<form method="post" action=""> Select which magazine and type qty of subscriptions:<br><br> <input type="checkbox" name="MAG[]" value="TREASURE"><b>Treasure Magazine</b> | Qty of Subscriptions: <input type="number" name="TNUMSUBS" size="5px"> <br> <input type="checkbox" name="MAG[]" value="VESSEL"><b>Vessel Magazine</b> | Qty of Subscriptions: <input type="number" name="VNUMSUBS" size="5px"> <br> <input type="checkbox" name="MAG[]" value="MECH"><b>MECH Magazine</b> | Qty of Subscriptions: <input type="number" name="MNUMSUBS" size="5px"> <br><br> <p><input type="submit" name="submit"></p> </form> <?php if (isset($_POST["submit"])) { // 先定义杂志和对应数量字段的关联关系,方便后续遍历 $magQtyMap = [ 'TREASURE' => 'TNUMSUBS', 'VESSEL' => 'VNUMSUBS', 'MECH' => 'MNUMSUBS' ]; // 检查是否选中了至少一个杂志 if (empty($_POST["MAG"])) { print "You didn't select a magazine"; } else { // 遍历每个选中的杂志 foreach($_POST['MAG'] as $magazine) { // 拿到当前杂志对应的数量字段名 $qtyField = $magQtyMap[$magazine]; // 检查数量是否为空(注意:如果用户填0,empty()也会判定为空,若要允许0可以看下面的说明) if (empty($_POST[$qtyField])) { print "Please enter a quantity for " . $magazine . " Magazine<br>"; } } } } ?>
几个细节说明
- 关联数组的好处:以后如果要加新杂志,只需要在
$magQtyMap里新增一行'NEW_MAG' => 'NEWNUMSUBS'就行,不用再写一堆if判断,代码更易维护。 - 关于empty()的小细节:
empty()会把0也判定为空值,如果你的业务允许用户订阅0份(虽然不太合理),可以把判断改成:
这样只会在用户完全没填写的时候触发提示。if (!isset($_POST[$qtyField]) || trim($_POST[$qtyField]) === '') { print "Please enter a quantity for " . $magazine . " Magazine<br>"; }
为什么原来的循环不生效?
再强调一下:你原来的代码里,foreach($_POST['MAG'] as $magazine)是嵌套在empty($_POST["MAG"])的if里的——当$_POST["MAG"]为空时,循环的数组是空的,循环根本不会执行;而当用户选中了杂志时,empty($_POST["MAG"])为假,整个if块都不会进入,所以那些检查数量的代码永远跑不起来。调整顺序后就正常啦!
内容的提问来源于stack exchange,提问作者Jamie Oh
相关产品推荐
相关产品推荐

