我正在为遗留PHP添加一些代码,使用filter_input_array()
来验证AJAX请求的URL中的$_GET
参数。
对函数进行编码后,我自然希望对其进行测试。
我在工作,发布了我在家里写的一些代码,因此被迫重现了记忆中的重点。但是,这段代码确实反映了我在家里遇到的问题(以我家的代码更清晰的方式)。
我的'测试'很快&脏。一个PHP页面重复清理$_GET
(通过取消设置并重新声明它),向其添加一些参数并调用filter_input_array()
。
我开始怀疑这是否有效......
<?php
echo('$_GET, at start of script<br>');
var_dump($_GET);
echo('<hr>');
echo('unset($_GET), then dump it ()obviously, we expect an error<br>');
unset($_GET);
var_dump($_GET);
echo('<hr>');
echo('Now, define $_GEt as an array, and add a few items, and validate it<br>');
$_GET = array();
$_GET['one'] = 1;
$_GET['two plus two'] = 5;
var_dump($_GET);
echo('<hr>');
echo('Now, attempt to validate the $_GET<br>');
$fileters = array('one' => FILTER_VALIDATE_INT,
'two plus two' => FILTER_VALIDATE_INT,
);
$validateGet = filter_input_array(INPUT_GET, $fileters, false);
echo('Validation result = ');
var_dump($validateGet);
?>
给出
$ _ GET,在脚本数组(0){}
的开头取消设置($ _ GET),然后转储它()显然,我们预计会出现错误E_NOTICE:
type 8 - 未定义变量:_GET - 第8行NULL现在,将$ _GEt定义为数组,并添加一些项目并验证它 array(2){[“one”] =&gt; int(1)[“two plus two”] =&gt; int(5)}
现在,尝试 验证$ _GET
验证结果= NULL
1)filter_input_array()
出了什么问题?
2)为什么结果null
,当文档说失败时会false
?我应该检查哪个?我目前使用if $validateGet === false
答案 0 :(得分:1)
函数filter_input_array似乎没有使用$_GET
,因此验证函数不会使用对此var所做的更改。
如果您确实需要更改此var的值(我认为这不是一个好习惯),您必须将filter_input_array()
替换为filter_var_array()
。此函数使用修改后的var并给出预期结果