获取POST发送的所有变量?

lis*_*aro 72 php http-post

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

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

?19=on&25=on&30=on
Run Code Online (Sandbox Code Playgroud)

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

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

Cod*_*ian 142

变量$_POST自动填充.

试着var_dump($_POST);看看内容.

您可以像这样访问各个值: echo $_POST["name"];

当然,这假设您的表单使用典型的表单编码(即 enctype=”multipart/form-data”

如果你的帖子数据是另一种格式(例如JSON或XML,你可以这样做:

$post = file_get_contents('php://input');
Run Code Online (Sandbox Code Playgroud)

并且$post将包含原始数据.

假设您正在使用标准$_POST变量,您可以测试是否选中了复选框,如下所示:

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}
Run Code Online (Sandbox Code Playgroud)

如果您有一系列复选框(例如

<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>
Run Code Online (Sandbox Code Playgroud)

使用[ ]在复选框名称表示所选择的值将通过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>";
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • $ post = file_get_contents('php:// input'); 节省了我的时间.谢谢.天哪,对不起... (4认同)
  • 您打算在最后添加示例/链接吗? (2认同)
  • 格拉茨100! (2认同)

Tud*_*tin 68

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

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


mti*_*ani 11

它已被弃用,不希望直接访问超级全局(因为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);
...
Run Code Online (Sandbox Code Playgroud)

现在你可以在var_dump你的foreach-Loops中使用它了

什么不行是用这种方法访问$ _REQUEST Superglobal.它Allways返回NULL,这是正确的.

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

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}
Run Code Online (Sandbox Code Playgroud)

编辑:此方法的扩展版本(当未设置其中一个请求方法时也起作用):

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;
}
Run Code Online (Sandbox Code Playgroud)


mar*_*rio 8

那么,像$_POST阵列一样?

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


bub*_*hut 6

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

extract($_POST);
Run Code Online (Sandbox Code Playgroud)

  • 想法很糟糕;巨大的安全孔。 (4认同)
  • 这段代码完美地回答了他的问题:“如何获取所有通过POST发送的变量?”,而其他答案则没有。最好的答案被否决了,去吧。安全性可能不是他的项目的问题。您是在说那些使php出错的人通过发明这个函数犯了一个错误,永远不要使用它? (2认同)
  • @bubbahut确切。没有人想要所有发布变量用于生产代码。 (2认同)

小智 5

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

print_r($_POST)
Run Code Online (Sandbox Code Playgroud)