通过传递变量PHP给filter_var()过滤器(filter_var()期望参数2为long,给出字符串)

时间:2015-05-30 14:06:20

标签: php filtering filter-var

现在我正在尝试使用filter_var()验证一些postdata。我想从我的数据库中获取与每个输入相关的过滤器。因此,如果输入应由EMAIL过滤,则变量将包含FILTER_VALIDATE_EMAIL。然后将这样传递:

        foreach($this->postdata as $key => $input){
        if(!((empty($requirements[$key][1])) || $requirements == 'allowed')){
            if(filter_var($input, $requirements[$key][1]) === false){
                $errors = true;
            }
        }
    }

$ postdata看起来像这样:

    array (size=4)
  'personer_navn' => 
    array (size=1)
      0 => int 0
  'personer_alder' => 
    array (size=1)
      0 => int 1
  'personer_kon' => 
    array (size=2)
      0 => int 2
      1 => int 3
  'personer_by' => 
    array (size=1)
      0 => int 4

$ $的要求如下:

    array (size=4)
  'personer_navn' => 
    array (size=4)
      0 => string 'string' (length=6)
      1 => string 'FILTER_VALIDATE_EMAIL' (length=21)
      2 => string '' (length=0)
      3 => string '' (length=0)
  'personer_alder' => 
    array (size=4)
      0 => string 'int' (length=3)
      1 => string 'FILTER_VALIDATE_EMAIL' (length=21)
      2 => string '' (length=0)
      3 => string '' (length=0)
  'personer_kon' => 
    array (size=4)
      0 => string 'allowed' (length=7)
      1 => string 'allowed' (length=7)
      2 => string 'allowed' (length=7)
      3 => string 'allowed' (length=7)
  'personer_by' => 
    array (size=4)
      0 => string 'string' (length=6)
      1 => string 'FILTER_VALIDATE_EMAIL' (length=21)
      2 => string '' (length=0)
      3 => string '' (length=0)

问题似乎是将$requirements[$key][1]传递给filter_var()函数。

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

FILTER_VALIDATE_EMAIL不能用作字符串。尝试使用它而不用引号。可以在documentation

中找到示例

答案 1 :(得分:1)

修复错误的简单修改

foreach($this->postdata as $key => $input){
        if(!((empty($requirements[$key][1])) || $requirements == 'allowed')){
            if(filter_var($input, constant( $requirements[$key][1]) ) === false){
                $errors = true;
            }
        }
    }

constant函数返回字符串过滤器的(integer)值。

也读了P.P-s的答案。