PHP条件分支异常导致$MaxNum变量始终被赋值为0问题求助
问题根因
- 赋值逻辑完全倒置:现有代码中给
$MaxNum赋值的else分支,对应的判断条件是if (is_numeric($_POST['maxnum'])),也就是说只有输入内容不是数字的时候才会触发赋值,非数字内容强制转为数字类型时默认就是0,这就是每次都得到0的核心原因。 - 合法输入无赋值逻辑:就算输入的是符合要求的数字,也只会进入
is_numeric的if分支做最大值校验,分支内完全没有给$MaxNum赋值的语句,合法输入也拿不到正确的值。 - 校验逻辑嵌套错误:判断输入为0的逻辑写在了
empty($_POST['maxnum'])的分支内部,empty()函数会将0、空字符串、null统一判定为true,会同时触发「未输入内容」和「不能为0」两个报错,不符合校验预期。
修正后的代码
global $MaxNum, $TheNum; $error = []; // 提前初始化错误数组避免未定义报错 if (isset($_POST['Submit'])) { // 先判空 if (empty($_POST['maxnum'])){ $error[] = "<p>Please enter at least something!"; } else { // 非空的情况下再做后续校验 // 校验是否为数字 if (!is_numeric($_POST['maxnum'])){ $error[] = "<p>You didn't enter a number!"; } else { $num = (int)$_POST['maxnum']; // 校验数值范围 if ($num == 0) { $error[] = "<p>Zero doesn't count!"; } elseif ($num > 2147483647) { $error[] = "<p>2.14 Billion jellybeans is a little excessive, right?"; } else { // 所有校验都通过再赋值 $MaxNum = $num; } } } }
修正后所有校验逻辑按顺序执行,只有所有校验全部通过后才会给$MaxNum赋值,同时避免了重复报错的问题。
内容的提问来源于stack exchange,提问作者Hard_Whey
相关产品推荐
相关产品推荐

