Получить все переменные, отправленные с помощью POST?
Мне нужно вставить все переменные, отправленные с сообщением, они были флажками, каждый из которых представлял пользователя.
Если я использую GET, я получаю что-то вроде этого:
?19=on&25=on&30=on
Мне нужно вставить переменные в базу данных.
Как получить все переменные, отправленные с помощью POST? Как массив или значения, разделенные комами или что-то еще?
Ответы
Ответ 1
Переменная $_POST
автоматически заполняется.
Попробуйте var_dump($_POST);
, чтобы просмотреть содержимое.
Доступ к отдельным значениям можно получить так: echo $_POST["name"];
Это, конечно, предполагает, что ваша форма использует типичную кодировку формы (т.е. enctype="multipart/form-data"
Если ваши данные для сообщений находятся в другом формате (например, JSON или XML, вы можете сделать что-то вроде этого:
$post = file_get_contents('php://input');
и $post
будут содержать необработанные данные.
Предполагая, что вы используете стандартную переменную $_POST
, вы можете проверить, установлен ли флажок:
if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
...
}
Если у вас есть набор флажков (например,
<form action="myscript.php" method="post">
<input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
<input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
<input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
<input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
<input type="checkbox" name="myCheckbox[]" value="E" />val5
<input type="submit" name="Submit" value="Submit" />
</form>
Использование [ ]
в поле флажка указывает, что к выбранным значениям будет обращаться PHP script как массив. В этом случае $_POST['myCheckbox']
не вернет одну строку, но вернет массив, состоящий из всех значений отмеченных флажков.
Например, если я проверил все поля, $_POST['myCheckbox']
будет массивом, состоящим из: {A, B, C, D, E}
. Вот пример того, как получить массив значений и отобразить их:
$myboxes = $_POST['myCheckbox'];
if(empty($myboxes))
{
echo("You didn't select any boxes.");
}
else
{
$i = count($myboxes);
echo("You selected $i box(es): ");
for($j = 0; $j < $i; $j++)
{
echo($myboxes[$i] . " ");
}
}
Ответ 2
вы должны иметь доступ к ним из переменной $_POST
:
foreach ($_POST as $param_name => $param_val) {
echo "Param: $param_name; Value: $param_val<br />\n";
}
Ответ 3
Итак, что-то вроде массива $_POST
?
Вы можете использовать http_build_query($_POST)
, чтобы снова добавить их в строку var=xxx&var2=yyy
. Или просто print_r($_POST)
, чтобы увидеть, что там.
Ответ 4
Он устарел и не желает напрямую обращаться к суперглобалам (так как php 5.5 я думаю?)
Каждая современная IDE скажет вам:
Нельзя напрямую обращаться к суперглобалам. Используйте некоторые функции фильтра (например, filter_input
)
Для нашего решения, чтобы получить все параметры запроса, мы должны использовать метод filter_input_array
Чтобы получить все параметры из метода ввода, используйте это:
$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...
Теперь вы можете использовать его в var_dump
или в foreach
-Loops
Что не работает, так это получить доступ к $_REQUEST Superglobal с помощью этого метода. Он Allways возвращает NULL
, и это правильно.
Если вам нужно получить все входные параметры, используя разные методы, просто слейте их, как в следующем методе:
function askForPostAndGetParams(){
return array_merge (
filter_input_array(INPUT_POST),
filter_input_array(INPUT_GET)
);
}
Изменить: расширенная версия этого метода (работает также, когда один из методов запроса не установлен):
function askForRequestedArguments(){
$getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
$postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
$allRequests = array_merge($getArray, $postArray);
return $allRequests;
}
Ответ 5
Почему бы не это, легко:
extract($_POST);
Ответ 6
Используя это, вы можете получить всю переменную post
print_r($_POST)