Получить все переменные, отправленные с помощью POST?

85

Мне нужно вставить все переменные, отправленные с сообщением, они были флажками, каждый из которых представлял пользователя.

Если я использую GET, я получаю что-то вроде этого:

?19=on&25=on&30=on

Мне нужно вставить переменные в базу данных.

Как мне получить все переменные, отправленные с помощью POST? Как массив или значения, разделенные запятыми, или что-то в этом роде?

Lisovaccaro
источник

Ответы:

164

Переменная $_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>";
    }
  }
Кодовый маг
источник
2
Вы намеревались добавить пример / ссылку в конце?
1
Спасибо, я действительно пытался просто print_r ($ _ POST), но он не работал из-за того, что все время использовал GET. My bad
lisovaccaro
@ Liso22 не беспокойся! С нами все случается :)
Code Magician
5
$ post = file_get_contents ('php: // input'); сэкономил мое время. Спасибо. О боже,
ебать
1
Грац на 100!
еще один
77

вы должны иметь доступ к ним из $_POSTпеременной:

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}
Тюдор Константин
источник
Вы намеревались добавить пример / ссылку в конце?
1
Заметил двоеточие в конце ответа.
Это ответ на вопрос.
Лисандро
11

Он устарел и не хочет напрямую обращаться к суперглобалам (я думаю, начиная с 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петлях.

Что не работает, так это доступ к $ _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;
}
mtizziani
источник
я получаю фатальную ошибку при попытке использовать ваше предложение «$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();». FATAL ERROR Постоянное выражение содержит недопустимые операции в строке номер 5
luckyguy73
@AshtonMorgan Я тестировал его (копировать пасту), и он отлично работает Какую версию PHP вы используете?
mtizziani
8

Итак, что-то вроде $_POSTмассива?

Вы можете использовать, http_build_query($_POST)чтобы снова собрать их в var=xxx&var2=yyyстроку. Или просто print_r($_POST)посмотреть, что там.

Марио
источник
6

Почему бы и нет, это просто:

extract($_POST);
буббахут
источник
4
Ужасная идея как есть; гигантская дыра в безопасности.
никто
2
Этот код отлично отвечает на его вопрос «Как мне получить все переменные, отправленные с помощью POST?», Тогда как другие ответы - нет. А лучший ответ не получает голосов, поймите. Безопасность может не быть проблемой для его проекта. Вы хотите сказать, что те, кто сделал php, сделали ошибку, изобретая эту функцию, что ее никогда нельзя использовать?
bubbahut
2
@bubbahut точно. Никому не нужны все пост-переменные для производственного кода.
cowboysaif
5

Используя это, вы можете получить все пост-переменные

print_r($_POST)

источник