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

PHP表单校验if子句失效:$everything_OK始终为true是什么原因?

PHP表单校验失效问题定位

核心问题原因

  • 最终校验跳转分支处于注释状态:你代码中if($everything_OK = true)对应的跳转逻辑被注释,就算校验逻辑将$everything_OK设为false,提交表单后也只会重新加载当前页,直观表现就是校验没有生效。同时该判断存在语法错误,判断相等应该用==或===,你写的=是赋值运算符,执行后会强制将变量值设为true,即使之前校验失败也会被覆盖为校验通过状态。
  • 输入内容未做去空白处理:用户输入带首尾空格的内容时,strlen会将空格计入长度,比如输入张会被统计为长度3,绕过长度小于2的校验,需要先对输入内容做trim()处理再校验。
  • 姓氏校验分支变量名不统一:注释掉的姓氏校验逻辑中用的变量是$wszystko_OK,和全局校验变量$everything_OK不一致,后续如果启用姓氏校验需要统一变量名,否则会出现姓氏校验不生效的问题。
  • 数字校验逻辑存在漏洞:is_numeric()只能判断内容是否全为数字,用户输入123李这类混合内容时无法被拦截,建议改用正则匹配是否存在数字。

修正后核心代码

<?php
session_start();
if(isset($_POST['name']))
{
    $everything_OK = true;
    // 先去除输入内容首尾空白字符
    $name = trim($_POST['name']);
    $surname = trim($_POST['surname']);
    $date = $_POST['date'];

    // 姓名校验逻辑
    if(strlen($name) < 2 || strlen($name) > 15 || preg_match('/\d/', $name))
    {
        $everything_OK = false;
        $_SESSION['e_name'] = '<strong>Podaj prawdziwe imię!</strong>';
    }

    // 取消注释跳转逻辑,修正判断运算符,跳转后加exit终止代码执行
    if($everything_OK === true)
    {
        header("Location: profil.php");
        exit();
    } 
}
?>

内容的提问来源于stack exchange,提问作者Bluker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:15:03