验证filter_input是否返回false

时间:2014-09-29 14:21:07

标签: php validation filter-input

filter_input()提及的文档:

  

请求变量的值成功,如果过滤器失败则为FALSE,   如果未设置variable_name变量,则返回NULL。

在网上研究了各种例子之后,我惊讶地发现他们中没有一个(我至少知道)检查过值FALSE。大多数示例仅检查NULL值:

if ( is_null( filter_input( INPUT_POST, 'name', FILTER_SANITIZE_STRING ) ) ) {
   // display error
}

这有什么理由吗?或者是否有一个真实的例子来检查FALSE值?如果是这样,你愿意提供这个例子,以便我可以从中受益。

另外,您是否愿意提供filter_input可能失败的情况。非常感谢。

1 个答案:

答案 0 :(得分:1)

这是因为!0是真的。为什么?加入!您正在进行布尔检查,因此您的变量将被转换。根据{{​​3}}:

转换为布尔值时,以下值被视为FALSE:

the boolean FALSE itself

the integer 0 (zero)

the float 0.0 (zero)

the empty string, and the string "0"

因此整数0转换为false,而所有其他整数转换为true。

这就是你需要对false或null进行类型安全检查的原因,因为如果因某种原因失败,filter_input()会返回值

$name = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING);
if ($name === false) {
    //filter failed
}
if ($name === null) {
    //variable was not set
}