我有我的本地测试服务器和正在运行的服务器。在测试服务器上,我使用此URL:
http://localhost/?&start[]=0&duration_[]=2&name[]=David&setting[]=26&start[]=6&duration[]=18&name[]=john&setting[]=26
从这个URL,我使用for循环来运行数组:
$num = count($_GET['start']);
if (isset($_GET['start']) && count($_GET['start']))
{
for($i=0;$i<$num;$i++)
{
echo "Time: " . intval(trim($_GET['start'][$i]));
}
}
这就像一个魅力。但是,当我在我的实际服务器上运行它时,我将所有变量作为空字符串返回...这是var_dump:
["start"]=>
string(0) ""
["duration"]=>
string(0) ""
["name"]=>
string(0) ""
["setting"]=>
string(0) ""
任何人都知道这里发生了什么?我从上面提出了相同的for-loop测试代码,我显然没有得到任何其他内容:&#34;时间:&#34;
答案 0 :(得分:0)
问题不在于代码或$ _GET方法或服务器的差异(稍有不同)。我没有意识到当我在主服务器上使用filter_var()时,我的数组被转换为字符串。导致问题的这一部分清理代码不在我的测试服务器上。根据{{3}}:
要过滤的值。请注意,标量值在过滤之前会在内部转换为字符串。
这是我第一次使用$ _GET变量的数组功能创建函数,所以我没有意识到在清理时,我正在清理每个GET变量,在这个新实例中,我正在清理每个GET数组,而不是GET值。
我使用的代码是:
$get_arr = $var_arr['_GET'];
$get_key = array_keys($get_arr);
$_GET[$get_key[$g_a]] = trim(filter_var($_GET[$get_key[$g_a]], FILTER_SANITIZE_SPECIAL_CHARS));
我将其更改为
的代码$get_arr = $var_arr['_GET'];
$get_key = array_keys($get_arr);
$_GET[$get_key[$k]][$i] = trim(filter_var($_GET[$get_key[$k]][$i], FILTER_SANITIZE_SPECIAL_CHARS));
这只是一个细微的区别,但足以让我调试这几天。希望这可以帮助其他人。
答案 1 :(得分:-2)
删除你的vars后的[]。
http://localhost/?start=0
而不是
http://localhost/?start[]=0
你传递[]作为你的字符串,所以它吐出来,删除[]。