我在复选框的表单验证方面遇到了问题。
这是复选框代码:
<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) {
但我只是不断收到错误:
未定义的索引:缺陷
答案 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”警告......