You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 08:24:06