现在我正在尝试使用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()函数。
感谢任何帮助。
答案 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的答案。