我刚刚开发了一段代码时遇到了问题,我将其缩小到不被接受的数字0。
这是html
<input type="text" size="1" name="hs" maxlength='3'>
如果我在输入框中输入ZERO,则会显示错误消息,表示未输入任何内容。
一旦我通过了这个,这就是PHP错误处理代码
$field = "hs";
if((!$hs) || strlen($hs = trim($hs)) == 0)
{
$form->setError($field, "* Home score not entered");
}
$field = "as";
if((!$as) || strlen($as = trim($as)) == 0)
{
$form->setError($field, "* Away score not entered");
}
如果我将分数输入0,我会收到这些错误。 任何想法为什么会这样? 这是你们有没有经历过的事情?
感谢
答案 0 :(得分:5)
!0
在PHP中是正确的,因此正在执行第一个if
子句。
答案 1 :(得分:4)
PHP将文本字符串'0
'和数字0
解释为false
。隐式类型转换有时很方便,有时很烦人。 (您从表单中获得的是字符串'0'
)。
尝试类似
的内容if (strlen($hs = trim($hs)) == 0) {
$form->setError($field, "* Home score not entered");
} elseif (!is_numeric($hs)) {
$form->setError($field, "* Score must be a number");
}
答案 2 :(得分:0)
正如其他人所说,值0被解释为假。 (所以表达式!0为真)
嘿 - 您没有使用register_globals是吗?
你应该做的是isset($_GET['hs'])
,并使用$ _GET ['hs']获取变量的值。
答案 3 :(得分:0)
if(! isset($hs) || ! is_numeric($hs) || $hs < 0) {
//error
}
我个人不知道你为什么要对它做一个strlen,肯定是$ hs ==“”就足够了?
答案 4 :(得分:0)
我建议放弃!$ hs。你的strlen($ hs)应该足以满足你想要测试的内容。我唯一可以添加的是使用户$ hs isset,这样就不会出现未定义的错误。