面向过程PHP表单验证功能结果反向异常排查求助
问题根因
validate校验函数的判断条件完全写反。
当前代码中if ($name)的逻辑是:当$name不为空(有有效值)时,才向错误数组添加「Name is required」的错误提示,自然出现「填了内容报错、空内容放行」的反向效果。
修复方案
修改validate函数的判断逻辑,字段为空时才添加错误提示,建议使用empty()做判空处理更稳妥:
function validate($name, $email, $password): array { $errors = []; if (empty($name)) { $errors[] = "Name is required"; } if (empty($email)) { $errors[] = "Email is required"; } if (empty($password)) { $errors[] = "Please enter a valid password"; } return $errors; }
额外优化建议
你当前直接读取$_POST里的字段没有做存在性判断,当用户恶意提交不携带对应字段的请求时,会抛出PHP Notice级别报错,建议修改提交逻辑的取值部分:
if ($_SERVER['REQUEST_METHOD'] === "POST") { $name = $_POST['name'] ?? ''; $email = $_POST['email'] ?? ''; $password = $_POST['password'] ?? ''; $errors = validate($name, $email, $password); if (empty($errors)) { signup($email, $name, $password); } }
内容的提问来源于stack exchange,提问作者Method
相关产品推荐
相关产品推荐

