logo

Без регистрации и СМС

Warning Эта страница является копипастой информации с сайта http://phpfaq.ru/, она ОЧЕНЬ СИЛЬНО устарела и требует обновления. Пожалуйста, пока что просто проигнорируйте её. Данная информация скорее всего больше навредит, нежели как-то поможет.

Не передаются переменные! Проблема Undefined variable

Во всех старых руководствах по РНР написано, что даные, полученные из формы, или переданные по ссылке, вот так: script.php?peremennaya=znachenie&variable=value автоматически становятся переменными PHP, $peremennaya и $variable Эта информация устарела. Дело в том, что в целях безопасности, начиная с версии 4.1, РНР настраивается по умолчанию так, чтобы переданные значения не назначались переменным. Получить же переданное значение можно обратившись к соответствующему массиву. Например: Если передаем методом GET, обратившись к скрипту по ссылке вида script.php?var=value или отправив форму, указав в ней method="GET", то все переменные содержатся в массиве $_GET. echo $_GET['var']; напечатает "value". Если получаем данные из формы, отправленной методом POST, то все поля этой формы содержатся в массиве $_POST. Допустим, в форме был элемент

<input type="hidden" name="var" value="1">

то в скрипте, который указан в action формы, можно написать echo $_POST['var']; и будет выведена 1.

Поэтому, если вы уверены, что переменная есть, но вы не можете ее найти - ищите ее в суперглобальных массивах. Подробнее о них можно почитать на русском языке в официальной документации http://ru2.php.net/variables.predefined

То же касается и серверных переменных, таких, как $REMOTE_ADDR, $PHP_SELF. Получить их можно, обратившись к массивам $_SERVER, $_ENV или функцией getenv - getenv('HTTP_REFERER');

Переменные, зарегистрированные в сессии, следует искать в массиве $_SESSION. Данные cookie содержатся в массиве $_COOKIE, сведения о закачанных файлах - в $_FILES Переменные окружения - в $_ENV, а так же, существует массив $_REQUEST, в котором собраны данные из GET, POST и cookie.

Важно! Весьма в поисках переменных помогает одна их главных функций PHP - phpinfo() ее следует применять всякий раз, когда вы "потеряли" переменную, вызовите phpinfo(32); в скрипте, в котором не работает авторизация, в скрипте, который принимает файл при аплоаде - и все найдется!

Все то же самое можно прочесть и в документации: http://www.php.net/manual/ru/security.globals.php

Этот сайт сделан по принципу «потому что могу». Если вам что-либо не нравится — просьба присылать PR с исправлениями сюды. Сами исходники сайта тоже в свободном доступе и лежат вот тут.

Копирайты и прочее принадлежат коллективному бессознательному.