PHP filter_input_array()没有按预期失败

问题描述:

我试图使用filter_input_array()来验证一些发布数据。尽管我尽了最大的努力,但函数似乎在$ filter数组内部传递null值(传递条件),而不是按照我的预期验证并返回false。PHP filter_input_array()没有按预期失败

下面的代码实现的例子:

$filters = array(
    'phone' => FILTER_VALIDATE_INT, 
    'email' => FILTER_VALIDATE_EMAIL 
); 

if(filter_input_array(INPUT_POST, $filters)){ 
    //filters are validated insert to database 
} else{ 
    //filters are invalid return to form 
} 

无论有种不好的数据(电话=“A”,电子邮件=“{} /〜!”为例)我进入阵列仍然返回而不是返回false和失败条件的函数。任何帮助将不胜感激。

为了让代码保持您想要的样子,请尝试使用此方法

 $filters = array(
    'phone' => FILTER_VALIDATE_INT, 
     'email' => FILTER_VALIDATE_EMAIL 
     ); 
     if(!in_array(null || false, filter_input_array(INPUT_POST, $filters))) 
     //enter into the db 
     else 
     //Validation failled 
+0

非常感谢。我想知道发生了什么事。我想我错误地解释了手册。 – Bl00dyRu1n 2012-02-27 18:57:43

filter_input_array如果任何过滤器失败,将不会返回false。相反,如果它们的过滤器失败,它将返回一个数组,其设置为false(如果它们没有设置,则返回null)

filter_input_array函数返回编辑输入数组的结果,如果失败则返回FALSE,NULL 。如果每个输入未设置所以,你应该得到的结果在一个变量 另一件事是检查谬误第一 你需要像这样

$filters = array(
    'phone' => FILTER_VALIDATE_INT, 
    'email' => FILTER_VALIDATE_EMAIL 
); 

if(false === ($res = filter_input_array(INPUT_POST, $filters))){ 
    /* Not valid */ 
} elseif(null == $res) { 
    /* Something is not set */ 
} else { 
    /* Everything is alright 
    * You can use $res variable here. 
    */ 
} 

看看PHP手册:。php.net manual