Bezdepbonusu7Программирование: статьи и ответы

Вопрос

$_GET пуст, если в URL-адресе есть переменные.

Автор вопроса: ganjanОтветов: 4

У меня есть URL-адрес, который выглядит так reg.php?lang=no_NO&passkey=test, и я пытаюсь получить переменную пароля, но он продолжает отображаться пустым.

Когда я пытаюсь print_r($_GET);, он печатает Array ( )?! Как это может произойти?

Сайт выглядит примерно так

    <?php

        print_r($_GET);

        include('..\libs\Smarty.class.php');
    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Activate account</title>

(...html code.. )

$smarty = new Smarty;

//$smarty->force_compile = true;
$smarty->debugging = false;
$smarty->caching = false;
$smarty->cache_lifetime = 120;


// PHP gettext api
define('PROJECT_DIR', realpath('./'));

(... define gettext ... )

$passkey=$_GET['passkey'];

(...work with passkey ...)

$smarty->display('templates\site.tpl');

?>


</body>
</html>

это оно. Я не могу понять, почему $_GET отображается пустым. Это уже давно сводит меня с ума..

  • Вы используете какой-либо вид перезаписи URL-адресов или reg.php является фактическим файлом? darma 12.08.2010
  • Вы случайно не используете CodeIgniter или другой фреймворк? Иногда они топчут переменные $_REQUEST. Matt Williamson 12.08.2010
  • @darma: даже если reg.php является реальным файлом - mod_rewrite может потерять строку запроса, если она была написана неправильно zerkms 12.08.2010
  • @Matt Williamson: на самом деле это не объясняет, почему $_GET исчез. zerkms 12.08.2010
  • @zerkms: вы правы, я особенно думал о [QSA], который мог отсутствовать. darma 12.08.2010
  • @zerkms: $_REQUEST включает $_POST и $_GET, и я точно знаю, что CodeIgniter убивает их, поэтому вам нужно использовать их специальные функции, чтобы добраться до них. Matt Williamson 12.08.2010

phpgetvariablespostglobal-variables

Ответы

Ответ 1 · рейтинг 8 · Chuck Burgess

Когда я сталкиваюсь с чем-то, что ставит меня в тупик, я всегда довожу свой сценарий до основ. Попробуйте это в самом верху вашего скрипта:

var_dump($_GET);
exit;

Затем вы можете увидеть, действительно ли он получает vars от хука. Если нет, то может быть что-то более глубокое... например, действительно ли PHP работает с Apache? Если это работает, начните добавлять другие вещи, пока это снова не остановится, и вы не сможете начать сужать виновника.

Ответ 2 · рейтинг 5 · Matt Williamson

Перемещение этого в ответ из моих комментариев выше. Две причины, по которым ваши параметры GET могут отсутствовать. Либо у вас настроен режим перезаписи, который удаляет их, либо вы используете фреймворк, такой как CodeIgniter, который перемещает их в другое место.

Если вы используете CodeIgniter, вы можете снова включить их с помощью parse_str($_SERVER['QUERY_STRING'], $_GET);

Ответ 3 · рейтинг 1 · user1345650

Убедитесь, что ваш файл php.ini не устанавливает max_input_vars в 0. Я случайно установил для себя что-то другое, поэтому добавление чего-либо в $_GET создало предупреждение PHP.

Ответ 4 · Mugasho Lincoln

я столкнулся с аналогичной проблемой $_GET[] пусто. в основном из-за проблем с сервером где-то, и мне пришлось сгенерировать свой собственный $GET, используя $_SERVER['HTTP_REFERER'].

//url='http://example.com/?search=john&location=london';
$get=array();
$query=mb_split("&",parse_url($_SERVER['HTTP_REFERER'],PHP_URL_QUERY));
if(!empty($query)) foreach ($query as $qr){
    $vars=mb_split('=',$qr);
    $get[$vars[0]]=$vars[1];
}

var_dump($get['search']);
// output 'john'

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы