获取所有通过POST发送的变量?


85

我需要插入所有与post一起发送的变量,它们是每个代表用户的复选框。

如果我使用GET,将会得到如下信息:

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

我需要在数据库中插入变量。

如何获取所有通过POST发送的变量?作为用逗号分隔的数组或值或其他东西?


Answers:


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>

[ ]复选框名称中的using表示选定的值将由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,因此无法正常工作。我的错
lisovaccaro

@ Liso22不用担心!发生在我们所有人身上:)
Code Magician

5
$ post = file_get_contents('php:// input'); 节省了我的时间。谢谢。噢天哪,f ** ng php ...
Nedudi 2014年

1
格拉茨100!
另一个

77

您应该能够从$_POST变量访问它们:

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}

您是否打算在最后添加示例/链接?

1
注意答案结尾处的冒号。

这是对所问问题的答案。
lisandro

11

它已被弃用,不希望直接访问superglobals(因为我认为PHP 5.5?)

每个现代的IDE都会告诉您:

不要直接访问Superglobals。使用一些过滤器功能(例如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。它始终返回NULL,这是正确的。

如果需要获取所有Input参数,并通过不同的方法进行转换,则只需像以下方法中那样将它们合并:

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;
}

当尝试使用您的建议时,出现致命错误“ $ postArray =($ tmp = filter_input_array(INPUT_POST))?$ tmp:Array();”。致命错误常量表达式在第5行上包含无效操作
luckyguy73 '16

@AshtonMorgan我测试了它(复制粘贴),并且工作正常。您使用什么PHP版本?
mtizziani

8

那么,类似$_POST数组的东西呢?

您可以使用http_build_query($_POST)再次将它们放入var=xxx&var2=yyy字符串中。或者只是print_r($_POST)看看那里有什么。


6

为什么不这样,这很容易:

extract($_POST);

4
可怕的想法是;巨大的安全孔。
没人

2
这段代码完美地回答了他的问题:“如何获取所有通过POST发送的变量?”,而其他答案则没有。最好的答案就被否决了。安全性可能不是他的项目的问题。您是在说那些使php出错的人通过发明这个函数犯了一个错误,永远不要使用它?
bubbahut 2015年

2
@bubbahut确切。没有人想要所有发布变量用于生产代码。
cowboysaif

5

使用这个你可以获得所有发布变量

print_r($_POST)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.