Мне нужно вставить все переменные, отправленные с сообщением, они были флажками, каждый из которых представлял пользователя.
Если я использую GET, я получаю что-то вроде этого:
?19=on&25=on&30=on
Мне нужно вставить переменные в базу данных.
Как мне получить все переменные, отправленные с помощью POST? Как массив или значения, разделенные запятыми, или что-то в этом роде?
Ответы:
Переменная
$_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-скрипта в виде массива. В этом случае$_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): <br>"); for($j = 0; $j < $i; $j++) { echo $myboxes[$j] . "<br>"; } }
источник
вы должны иметь доступ к ним из
$_POST
переменной:foreach ($_POST as $param_name => $param_val) { echo "Param: $param_name; Value: $param_val<br />\n"; }
источник
Он устарел и не хочет напрямую обращаться к суперглобалам (я думаю, начиная с php 5.5?)
Каждая современная IDE скажет вам:
В нашем решении, чтобы получить все параметры запроса, мы должны использовать метод
filter_input_array
Чтобы получить все параметры из метода ввода, используйте это:
Теперь вы можете использовать его в
var_dump
своихforeach
петлях.Что не работает, так это доступ к $ _REQUEST Superglobal с помощью этого метода. Он всегда возвращается,
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; }
источник
Итак, что-то вроде
$_POST
массива?Вы можете использовать,
http_build_query($_POST)
чтобы снова собрать их вvar=xxx&var2=yyy
строку. Или простоprint_r($_POST)
посмотреть, что там.источник
Почему бы и нет, это просто:
источник
Используя это, вы можете получить все пост-переменные
источник