PHP filter_input_array()没有按预期失败

时间:2012-02-27 16:36:47

标签: php filter validation

我正在尝试使用filter_input_array()来验证一些帖子数据。尽管我付出了最大的努力,但函数似乎在$ filter数组中返回null值(传递条件),而不是验证失败并返回false,如我所料。

以下是代码实现的示例:

$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的函数并且条件失败。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

如果任何过滤器失败,

filter_input_array将不会返回false。相反,如果过滤器失败,它将返回一个数组,其中相应的项设置为false(如果未设置,则返回null。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

要按照您希望的方式保存代码,请尝试使用此方法

      $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