Извлекаем массив переменных, переданных методом POST или GET

Как извлечь весь массив переменных, переданных из формы в скрипт (или просто на другую страницу)?

Все данные, переданные из формы методом POST или GET, передаются в виде массива. Если в настройках PHP стоит деректива register_globals off (т.е. на хостинге выключены глобальные переменные, что сейчас очень часто практикуется), то перед использованием переменных нам необходимо разобрать этот  массив, получить имена переменных и присвоить им соответствующие значения. Предположим, что из формы данные передаются методом POST, . В таком случае значения переменных можно получить так:

<?php
$var=$_POST['var'];
?>
где $var — это имя переменной, а ‘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

Add a Comment