PHP的filter_input_array()函数没有按预期失败

4

我正在尝试使用filter_input_array()函数验证一些post数据。尽管我尽力了,但是该函数似乎在$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
}

无论我输入什么样的坏数据(例如phone='a',email='{}/!~'),数组仍然被返回,而函数并没有返回false并且也没有失败。任何帮助将不胜感激。
3个回答

3

filter_input_array不会在任何过滤器失败时返回false。相反,如果它们未通过过滤器,则将返回一个包含适当项目设置为false的数组(或null,如果它们未设置)。


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手册

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

非常好,谢谢。我一直在想到底是怎么回事。我猜我误解了手册的意思。 - Bl00dyRu1n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接