PHP自定义emptyFields校验函数无论输入是否正常均触发空字段报错
问题排查及修复方案
你遇到的报错是因为inputSanitize函数存在核心语法问题,导致所有传入校验的变量最终为空,触发emptyFields的校验规则。具体问题和修复步骤如下:
1. 核心问题:inputSanitize无返回值
PHP默认采用传值方式传递参数,你在inputSanitize内部修改的只是参数的临时副本,没有将处理后的值返回给上层调用。
如果你调用清理函数的写法为$name = inputSanitize($_POST['name']),无返回值的函数会默认返回NULL,导致四个校验变量全部为NULL,empty()判断始终返回真,直接触发跳转逻辑。
2. 修复步骤
第一步:给inputSanitize函数添加返回值
function inputSanitize($n) { $n = addslashes($n); $n = htmlspecialchars($n); $n = trim($n); return $n; // 新增该行,返回处理后的字符串 }
第二步:确认输入接收代码写法正确
必须将清理函数的返回值赋值给对应校验变量,示例写法如下:
$name = inputSanitize($_POST['name']); $email = inputSanitize($_POST['email']); $pwd = inputSanitize($_POST['pwd']); $cpwd = inputSanitize($_POST['cpwd']);
可选优化:简化emptyFields逻辑
原有逻辑可以直接简写为以下形式,不影响运行结果,可读性更高:
function emptyFields($n, $e, $p, $cp) { return empty($n) || empty($e) || empty($p) || empty($cp); }
调试辅助
如果修复后问题仍存在,可以在调用emptyFields前临时添加以下代码,打印变量值确认是否正常获取到输入:
var_dump($name, $email, $pwd, $cpwd);die;
内容的提问来源于stack exchange,提问作者user5237857
相关产品推荐
相关产品推荐

