表单验证 - 确保选中至少1个复选框

时间:2017-03-20 14:34:21

标签: php

我在复选框的表单验证方面遇到了问题。

这是复选框代码:

<div class="form-group">
    <div class="checkbox checkbox-danger checkbox-inline">
        <input type="checkbox" name="defect[]" value="{$ng_id}">
    </div>
</div>

如果我只是做这样的事情,那么它会回应我选择的任何东西。

foreach($_POST['defect'] as $defects) {
echo $defects;
}

我试图自己使用空函数以及:

if(empty($defects) || count($defects) < 1) {

但我只是不断收到错误:

  

未定义的索引:缺陷

2 个答案:

答案 0 :(得分:-1)

问题是当您没有选中任何复选框时,不会发送名为defect的变量。只需在任何带空值的复选框之前创建隐藏字段,以便始终发送它。

<input type="hidden" name="defect[]" value="">

在PHP方面:

if (!empty($_POST['defect']) && count($_POST['defect']) > 1) {
    // all ok
} else {
    // show error
}

答案 1 :(得分:-2)

如果没有勾选任何内容,通常不会设置已发布的数组。

如果您还想检查它是一个数组,您可以执行以下检查: -

if(@!is_array($_POST['defect'])){
    // Error
} else {
    foreach($_POST['defect']){
        // do stuff
    }
}

这是使用@来抑制警告,否则你会得到“未定义”错误。

如果你想避免这样做,你可以这样做:

if(!isset($_POST['defect'])){
   // Now check it's an array and has a count > 0
}

..但另外你还需要确保它是一个数组并且计数大于零。在这个特定实例中抑制警告的优点是你知道它是一个数组PLUS你知道必须有一个值,否则没有数组从POST传入。这是一个罕见的时刻,抑制警告可以节省你做2次额外的IF检查以避免其他警告。你必须检查它是一个数组,否则你将得到“无效的foreach”警告..​​....