Извлекаем массив переменных, переданных методом POST или GET
Как извлечь весь массив переменных, переданных из формы в скрипт (или просто на другую страницу)?
Все данные, переданные из формы методом POST или GET, передаются в виде массива. Если в настройках PHP стоит деректива register_globals off (т.е. на хостинге выключены глобальные переменные, что сейчас очень часто практикуется), то перед использованием переменных нам необходимо разобрать этот массив, получить имена переменных и присвоить им соответствующие значения. Предположим, что из формы данные передаются методом POST, . В таком случае значения переменных можно получить так:
<?php
где $var — это имя переменной, а ‘var’ — это значение, которое мы присвоим этой переменной,
$var=$_POST['var'];
?>
если переменных много, то приходится писать много таких строчек:
<?
$var1=$_POST['var1'];
$var2=$_POST['var2'];
...
$varN=$_POST['varN'];
?>
Утомительно и громоздко… У меня возникла мысль автоматизировать получение массива переменных, переданных из формы. Но незнание английского языка и неумение составлять поисковые запросы привело к тому, что я далеко не сразу нашел решение. Поэтому делюсь, может кому-то это тоже будет полезно…
Выходим из положения так:
<?
$var = $_POST;
foreach ( $var as $key => $value ) {
$$key = $value;
}
?>
В итоге все переменные у нас получены вместе со значениями. Дальше можно обращаться к переменным как обычно, по имени: $var
Не редкость, когда необходимо значения этих переменных очистить от лишнего мусора (пробелы, служебные символы и т.п.)
Делается тоже просто:
<?
$var = $_POST;
foreach ( $var as $key => $value ) {
$$key = trim(strip_tags($value));
}
?>
Если данные передаются методом GET, то поступаем аналогично, только меняем $_POST на $_GET
Можно совместить получение данных обоими способами, написав две соответствующие процедуры…
К сожалению моих знаний недостаточно для того, чтобы объединить всё в одной процедуре, да и попросту мне этого уже достаточно. Вставляю вышеприведенный код в начало каждой страницы, которая должна получать данные и больше не беспокоюсь, что какая-то переменная не будет принята.
Есть возражения, комментарии? Пишите!
P.S.: Сегодня, 11.01.2009, наткнулся на другое решение этой же задачи Эмуляция директивы register_globals on