获取POST发送的所有变量?

时间:2011-11-21 05:02:41

标签: php http-post

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

如果我使用GET,我会得到这样的结果:

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

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

如何通过POST发送所有变量?作为一个或多个用逗号分隔的数组?

6 个答案:

答案 0 :(得分:133)

自动填充变量$_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>";
    }
  }

答案 1 :(得分:64)

您应该可以从$_POST变量

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

答案 2 :(得分:9)

它已被弃用,不希望直接访问超级全局(因为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_dumpforeach - 循环

中使用它

无效的方法是使用此方法访问$ _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;
}

答案 3 :(得分:8)

那么,像$_POST数组?

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

答案 4 :(得分:5)

为什么不这样,很容易:

extract($_POST);

答案 5 :(得分:4)

使用此u可以获得所有后置变量

print_r($_POST)