PHP表单校验如何仅将有效错误信息存入数组避免出现空值
问题原因
你的校验函数在校验通过时没有显式设置返回值,PHP默认会返回null,你直接使用$errors[] = 函数返回值的写法,无论校验是否通过都会往数组追加元素,因此输入符合规则时就会存入空的null值。另外需要注意你的函数名存在拼写错误:定义时写的是checkLenth,调用时写的是checkLength,会导致调用时报错,请先统一修正拼写。
解决方案
下面提供三种可行的实现方式,可根据自己的需求选择:
方式1:调用时判断返回值再追加(无需修改原有函数)
只有当函数返回非空的错误信息时,才往错误数组中添加内容,代码示例:
$errors = array(); if ($error = isEmpty($_POST['name'])) { $errors[] = $error; } if ($error = isEmpty($_POST['email'])) { $errors[] = $error; } // 注意修正函数名拼写 if ($error = checkLength($_POST['email'])) { $errors[] = $error; }
方式2:优化校验函数,直接操作错误数组(代码更简洁)
修改functions.php中的校验函数,通过引用传参直接操作错误数组,外部调用时不需要额外判断:
调整后的函数代码
function isEmpty($input, &$errors, $errorMsg = "Input required"){ if(empty($input)){ $errors[] = $errorMsg; } } function checkLength($input, &$errors, $errorMsg = "Input length must be more than 3"){ if(strlen($input) < 3){ $errors[] = $errorMsg; } }
调用方式
$errors = array(); isEmpty($_POST['name'], $errors); isEmpty($_POST['email'], $errors); checkLength($_POST['email'], $errors);
方式3:现有逻辑不变,最后统一过滤空值
如果不想调整现有调用逻辑,可以在所有校验完成后用array_filter清理数组中的空值:
// 所有校验执行完成后,过滤空值 $errors = array_filter($errors);
内容的提问来源于stack exchange,提问作者user_m
相关产品推荐
相关产品推荐

