给filter_var()过滤器通过传递一个变量PHP (filter_var()期望参数2是长,字符串给定)


Give filter_var() filter by passing a variable PHP (filter_var() expects parameter 2 to be long, string given)

现在我正试图用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()函数。

FILTER_VALIDATE_EMAIL不能作为字符串使用。试着不加引号。示例可以在文档

中找到。

一个简单的改变将修复错误

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)值,为字符串。