数字0未通过

时间:2010-07-21 17:11:28

标签: php

我刚刚开发了一段代码时遇到了问题,我将其缩小到不被接受的数字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,我会收到这些错误。 任何想法为什么会这样? 这是你们有没有经历过的事情?

感谢

5 个答案:

答案 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']获取变量的值。

<强> Using register_globals is a HUGE security liability.

答案 3 :(得分:0)

if(! isset($hs) || ! is_numeric($hs) || $hs < 0) {
    //error
}

我个人不知道你为什么要对它做一个strlen,肯定是$ hs ==“”就足够了?

答案 4 :(得分:0)

我建议放弃!$ hs。你的strlen($ hs)应该足以满足你想要测试的内容。我唯一可以添加的是使用户$ hs isset,这样就不会出现未定义的错误。