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

问题描述 投票:0回答:7

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

如果我使用 GET 我会得到这样的东西:

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

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

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

php http-post
7个回答
196
投票

变量

$_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>";
    }
  }

90
投票

您应该能够从

$_POST
变量访问它们:

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

15
投票

已弃用并且不希望直接访问 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
,这是正确的。

如果你需要获取所有输入参数,通过不同的方法,只需像下面的方法一样合并它们:

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

11
投票

所以,像

$_POST
数组这样的东西?

您可以使用

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


9
投票

为什么不是这个,这很简单:

extract($_POST);

6
投票

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

print_r($_POST)

0
投票
do this way:

 $data = json_decode(file_get_contents("php://input"));
 $arr = get_object_vars($data);
extract($arr);`
© www.soinside.com 2019 - 2024. All rights reserved.