取消设置并重新创建$ _GET,以便测试filter_input_array()

时间:2016-12-15 09:29:07

标签: php arrays validation get

我正在为遗留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

1 个答案:

答案 0 :(得分:1)

函数filter_input_array似乎没有使用$_GET,因此验证函数不会使用对此var所做的更改。

如果您确实需要更改此var的值(我认为这不是一个好习惯),您必须将filter_input_array()替换为filter_var_array()。此函数使用修改后的var并给出预期结果

http://ideone.com/x5D3Pb