Переменные $ _GET передаются с пустыми строковыми значениями - PullRequest
0 голосов
/ 23 мая 2018

У меня есть локальный тестовый сервер и работающий сервер.На тестовом сервере я использую этот 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) ""

Кто-нибудь знает, что здесь происходит?Я поместил тот же самый тестовый код для цикла сверху и, очевидно, ничего не получаю, кроме: «Время:»

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Проблема была не в коде, не в методе $ _GET, а в разнице серверов (небольшая разница).Я не осознавал, что когда я использовал filter_var () на моем главном сервере, мои массивы превращались в строки.Этот фрагмент кода очистки, вызвавший проблему, отсутствовал на моем тестовом сервере.Согласно документации php :

Значение для фильтрации.Обратите внимание, что скалярные значения преобразуются в строку до того, как они будут отфильтрованы.

Впервые я создал функцию, использующую возможности массива переменной $ _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));

Это всего лишь небольшое различие, но достаточно одного, чтобы я отладил это в течение пары дней.Надеюсь, это поможет кому-то еще на этом пути.

0 голосов
/ 23 мая 2018

Удалите [] после ваших переменных.

http://localhost/?start=0 

вместо

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

вашего прохождения [] в качестве вашей строки, чтобы оно выплевывало это, удалите [].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...