2014-09-29 63 views
1

filter_input()说明文档中提到:成功的请求的变量,FALSE的验证如果filter_input返回false

值,如果过滤器出现故障, 或NULL,如果变量名变量没有设置。

在网上学习了各种示例之后,我很惊讶地发现它们中没有一个(我知道至少)检查了值FALSE。大多数的例子只检查了NULL值:

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

是否有什么原因呢?或者是否有真实生活的例子检查FALSE值?如果是这样,你会好好提供一个例子,以便我可以从中受益。

此外,你会提供filter_input可能会失败的情况。非常感激。

+0

*“我问的是为什么大多数人没有在处理filter_input时,不要检查FALSE值。“* - 有时候人们只是奇怪的动物,我们不知道为什么有些人会做,有些人不会。 – 2014-09-29 14:33:39

+0

谢谢你的幽默,但回到我的问题......你有任何'假'检查的例子吗?其次,在什么情况下'filter_input'可能会失败? – Grateful 2014-09-29 14:35:23

+0

这是50%的幽默和50%的严肃性(*很高兴看到你有一种幽默感*);)我无法给你一个关于FALSE被检查的例子。看看下面的堆栈问答:我认为它可能会*希望*回答你的问题http://stackoverflow.com/q/23392128/ - **编辑:**为什么它很可能会失败我会说/认为这将取决于过滤器选项是组。 – 2014-09-29 14:43:56

回答

1

这是因为!0是真的。为什么?通过添加!你正在做一个布尔检查,所以你的变量被转换。并根据manual

当转换为boolean时,以下值被认为是FALSE:

the boolean FALSE itself 

the integer 0 (zero) 

the float 0.0 (zero) 

the empty string, and the string "0" 

所以整数0被转换为false,而所有其他的整数转换为真实的。

这就是为什么你需要做一个类型安全检查虚假或无效,因为这些都是值filter_input()回报,如果由于某种原因失败

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

我没有回答你的问题,但请访问以下链接我会帮你。 http://www.sitepoint.com/input-validation-using-filter-functions/ – deadman 2014-09-29 14:38:02

+0

感谢您的链接 – Grateful 2014-09-29 14:40:42

相关问题