PHPFAQ  
Начинающим   Технологии   MySQL   Ошибки   Ссылки   Юмор   О сайте   Форум   PHP Club  

Не передаются переменные! Проблема 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

Другие материалы раздела:
Хочу изучать PHP и Mysql. С чего начать?
Самые основы. Как работает PHP.
Документация по PHP. Мануал по PHP, книги.
Решение проблемы "Cannot add header information - headers already sent"
Различие между абсолютными и относительными путями. В файловой системе и на сайте.
Пример системы управления сайтом
Что такое PHP?
Как писать музыку на PHP


Комментарии

Bizzart 19.07.10 12:45
Ух. Нашел!
Anr 14.06.10 23:06
Спасибо:)
moshimi 23.04.10 14:29
И от меня спасибочки, до того напарилась с этими переменными, всё теперь понятно: почему и как!
Kpy 16.10.09 12:45
Спасибо, в гугле топовая тема, на решение данной проблемы.
Игорь_vasinsky.com 24.02.09 20:56
НУ не Косте так ещё кому нить поможет.
Игорь_vasinsky.com 23.01.09 04:54
Мне тоже очень понравилась статья. Хорошо описано. Не где не встречал.

p.s.
А вот для Константина - вопрос о форме:
Администратор имел ввиду использовать форму с методом POST и action=<?php PHP_SELF?>
Ответ: метод GET
и action тут не при чем.
и Константин, я надеюсь, за полгода уже разобрался в своей проблеме
1 30.11.08 18:14
$sql = mysql_query("SELECT * FROM page WHERE id ='$page' and razdel='$razdel'" ,$db);
makssnat 24.11.08 22:07
Спасибо, хорошая статья!
Септ 20.11.08 21:59
Константин, то, что вы хотите сделать, если не ошибаюсь, делается на AJAX.
Автору - угу, давно наткнулся на описанную проблему, нашёл способ её решить. А теперь вот знаю, откуда эта проблема вообще взялась.
Спасибо!
Константин 20.08.08 14:16
Окей, всё замечательно работает, однако, может Вы подскажите ответ на такой вопрос:
Метод Get и Post приводит к перезагрузке формы, мне же необходимо вызвать php скрипт так, чтобы обработать в нем данные с формы и выдать результаты на ту же страницу.
К примеру: есть раскрывающийся список, в нем есть данные, допустим страны, после выбора страны, необходимо, чтобы очистился второй список и в нем появились города, присущие выбранной стране.
Мне нужно узнать какими методами php может узнать данные которые я выбрал.
P.S. Поскольку страны и города хранятся в таблицах бд Mysql, применение php считаю необходимым
Ответ: Методом GET.
Выбирается страна, форма перезагружается, и скрипт из адресной строки узнает страну. Все элементарно.

Написать комментарий
Пожалуйста, воздержитесь от посылки спама.
Сообщения, содержащие гиперссылки, проходят премодерацию.
Представьтесь:
Вы робот?
Сообщение:

© phpfaq.ru, 2010
Rambler's Top100 0.021 sec.