【问题标题】:Get all variables sent with POST?获取通过 POST 发送的所有变量?
【发布时间】:2012-01-02 16:43:17
【问题描述】:

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

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

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

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

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

【问题讨论】:

标签: php http-post


【解决方案1】:

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

【讨论】:

  • 您是否打算在末尾添加示例/链接?
  • 谢谢,我实际上只是尝试了 print_r($_POST),但由于一直在使用 GET,它无法正常工作。我的坏
  • @Liso22 不用担心!发生在我们所有人身上:)
  • $post = file_get_contents('php://input');节省了我的时间。谢谢。天哪,f**ng php...
  • 为 100 点赞!
【解决方案2】:

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

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

【讨论】:

  • 您是否打算在末尾添加示例/链接?
  • 注意到答案末尾的冒号。
  • 这是问题的答案。
【解决方案3】:

它已被弃用并且不希望直接访问超全局变量(我认为是从 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-Loops 中使用它

不能使用此方法访问 $_REQUEST 超全局变量。它总是返回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;
}

【讨论】:

  • 我在尝试使用您的建议“$postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();”时遇到致命错误。 FATAL ERROR 常量表达式在第 5 行包含无效操作
  • @AshtonMorgan 我测试了它(复制粘贴),它工作正常。你用的是什么 PHP 版本?
【解决方案4】:

那么,类似于$_POST 数组?

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

【讨论】:

    【解决方案5】:

    为什么不这样,很简单:

    extract($_POST);
    

    【讨论】:

    • 糟糕的想法原样;巨大的安全漏洞。
    • 这段代码完美地回答了他的问题“我如何通过 POST 获取所有变量?”,而其他答案没有。最好的答案被否决了,去算一下。对于他的项目来说,安全性可能不是问题。你是说做php的人发明了这个功能是错误的,永远不应该使用它?
    • @bubbahut 完全正确。没有人想要生产代码的所有发布变量。
    【解决方案6】:

    使用这个你可以得到所有的post变量

    print_r($_POST)
    

    【讨论】:

      猜你喜欢
      • 2014-09-01
      • 2012-10-25
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 2012-07-20
      • 2014-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多