代码之家  ›  专栏  ›  技术社区  ›  jeffery_the_wind

在PHP中循环POST变量的正确(安全)方法

  •  0
  • jeffery_the_wind  · 技术社区  · 7 年前

    我有一些遗留代码要更新。在那个版本的代码(jqGrid的后端)中,POST变量中发送到服务器的搜索参数。POST键是字段名,值是搜索值。从几年前开始,我只通过 filter_input 功能,这是我的IDE建议的。但是,我还没有找到一种推荐的方法,可以在不直接访问POST变量的情况下循环遍历POST变量。

    搜索参数的遗留代码部分如下:

    /*
     * Search Filter
     */
    if ($search){
        $where_string = ' where ';
        foreach ($_POST as $key => $value){
            if (in_array($key,array('_search','nd','rows','page','sidx','sord','arg1','arg2'))==true){
                continue;
            }
            //put in functionality to search for exact values
            //to search for exact values, include a * character before the value you are searching for
            if (strpos($value, "*") === 0){
                //exact search
                $value = substr($value,1);
            }else{
                //like search
                $value = "%".$value."%";
            }
            $key = $mysqli->real_escape_string($key);
            $value = $mysqli->real_escape_string($value);
            $where_string .= '`'.$key.'` like "'.$value.'" AND ';
        }
        $where_string = rtrim($where_string,' AND ');
    }
    

    我的IDE给出的警告是: Do not Access Superglobal $_POST Array Directly. foreach 行。只是不确定我是否应该完全避免这种循环,或者是否有办法使用filter_input。它是任何表的泛型代码。谢谢你的指导。

    0 回复  |  直到 7 年前
    推荐文章