Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php $\u获取以空字符串值传递的变量_Php_Get - Fatal编程技术网

Php $\u获取以空字符串值传递的变量

Php $\u获取以空字符串值传递的变量,php,get,Php,Get,我有本地测试服务器和正在运行的服务器。在测试服务器上,我使用以下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 (isse

我有本地测试服务器和正在运行的服务器。在测试服务器上,我使用以下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]));
    }
}

有人知道这里发生了什么吗?我在上面为循环测试代码添加了相同的代码,显然除了“Time:”

删除变量后面的[]之外,我什么都没有得到

http://localhost/?start=0 
而不是

http://localhost/?start[]=0

将[]作为字符串传递,以便它将其吐出,请删除[]。

问题不在于代码或$\u GET方法,也不在于服务器的差异(当然,这是一个细微的差异)。我没有意识到,当我在主服务器上使用filter_var()时,我的数组被转换成字符串。导致问题的这段净化代码不在我的测试服务器上。根据:

要筛选的值。请注意,在过滤标量值之前,标量值会在内部转换为字符串

这是我第一次使用$\u 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));

这只是一个细微的区别,但足以让我调试几天。希望这对其他人有所帮助。

离题评论:为什么不使用
foreach
?我认为for循环中有多个变量更直观。对于这个问题,我已经将代码简化为循环一个数组($\u GET['start']),而不是全部数组来显示问题。您应该使用http\u build\u query()来构建url,否则字符串编码将是“这很有效。但是,当我在实际服务器上运行它时,”-这表示问题与您提供的代码无关。也许你在直播服务器上有一些URL重写配置。这是一个数组,他想要一个数组。他说他想要一个数组吗?他的代码说的和他想要的可能是不同的。我明白了,他没有说他想要一个数组是我的观点。他的代码是这样写的,但是如果他知道他的代码做了什么,他就不会在这里了,URL使用数组语法。代码需要数组语法。OP说它在他的测试环境中工作。在这个问题中,我根本看不到任何表明“不使用数组”可以解决问题的东西。感谢您的输入,它已经被适当地归档了
$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));