$_POST

(PHP 4 >= 4.1.0, PHP 5, PHP 7, PHP 8)

$_POSTHTTP POST 变量

描述

一个关联数组,包含使用 application/x-www-form-urlencodedmultipart/form-data 作为 HTTP Content-Type 在请求中时,通过 HTTP POST 方法传递给当前脚本的变量。

示例

示例 #1 $_POST 示例

<?php
echo 'Hello ' . htmlspecialchars($_POST["name"]) . '!';
?>

假设用户 POST 了 name=Hannes

上面的示例将输出类似于

Hello Hannes!

注释

注意:

这是一个“超全局”或自动全局变量。这仅仅意味着它在整个脚本的所有范围内都可用。无需执行 global $variable; 来在函数或方法中访问它。

添加注释

用户贡献注释 6 个注释

james dot ellis at gmail dot com
15 年前
PHP 处理 POST 和 GET 变量的一个特性是它会自动解码索引的表单变量名。

我见过无数个项目,它们为了解码变量而跳过额外的和不必要的处理步骤,而 PHP 已经为你完成了这一切。

示例伪代码

许多网站都这样做

<form ....>
<input name="person_0_first_name" value="john" />
<input name="person_0_last_name" value="smith" />
...

<input name="person_1_first_name" value="jane" />
<input name="person_1_last_name" value="jones" />
</form>

而他们可以这样做

<form ....>
<input name="person[0][first_name]" value="john" />
<input name="person[0][last_name]" value="smith" />
...
<input name="person[1][first_name]" value="jane" />
<input name="person[1][last_name]" value="jones" />
</form>

使用第一个示例,你需要进行字符串解析/正则表达式来获取正确的值,以便将它们与应用程序中的其他数据匹配起来。而使用第二个示例,你将得到类似于
<?php
var_dump
($_POST['person']);
// 将得到类似于以下内容:
array (
0 => array('first_name'=>'john','last_name'=>'smith'),
1 => array('first_name'=>'jane','last_name'=>'jones'),
)
?>

当你想将各种发布的表单数据链接到服务器端的其他哈希表中,或者当你需要将发布的数据存储在独立的“隔间”数组中,或者当你想要将发布的数据链接到不同框架中的不同记录处理程序时,这是非常有价值的。

还要记住,使用 [] 作为索引将在数据发布后创建一个连续的数字数组,因此有时最好显式定义索引。
php (at) vxvr /dot de
3 年前
如果你想在你的脚本中接收 application/json post 数据,你不能使用 $_POST。$_POST 只能处理表单数据。
相反,从 php://input 中读取。你可以使用 fopen 或 file_get_contents。

示例

<?php
// 获取 JSON 内容
$json = file_get_contents('php://input');

// 解码 JSON 数据
$data = json_decode($json);
?>
darren_wheatley at hotmail dot com
9 年前
我知道这是一件非常基本的事情,但我遇到了在我的 HTML 页面上从表单提交中访问 $_POST 变量的问题。我花了很长时间才弄清楚,而且我在谷歌上找不到我需要的帮助。因此有了这篇帖子。

确保你的输入项具有 NAME 属性。id 属性是不够的!你输入控件上的 name 属性是 $_POST 用来索引数据的,因此显示结果。
woodhavenbp at yahoo dot com
8 年前
这里有一个关于正确引用 $_POST 中元素的早期注释,这是准确的。$_POST 是一个关联数组,由表单元素的 NAMES 索引,而不是 IDs。可以这样想:元素 "id=" 用于 CSS,而元素 "name=" 用于 PHP。如果你在 POST 数组中引用元素 ID,它将不起作用。你必须为元素分配一个 name 属性,才能在 POST 数组中正确引用它。这两个属性可以相同,以便简化,例如:
<input type="text" id="txtForm" name="txtForm">...</input>
CXJ
10 年前
请注意,$_POST 并非针对所有 HTTP POST 操作都设置,而仅针对特定类型的 POST 操作。我还没有找到文档,但到目前为止我发现的是:

$_POST _已_ 为

Content-Type: application/x-www-form-urlencoded

换句话说,对于标准的 Web 表单。

$_POST _未_ 为

Content-Type:text/xml

一种用于通用 HTTP POST 操作的类型。
paul at youngish dot homelinux^org
15 年前
对于具有多个表单的页面,以下是一种处理可能收到的不同 POST 值的方法。此代码适用于页面上具有不同表单的情况。添加另一个表单只需要在数组中添加一个额外的条目,并使用 switch 语句。

<?php

if (!empty($_POST))
{
// 每个页面上不同表单的 POST 值数组。
$postNameArr = array('F1_Submit', 'F2_Submit', 'F3_Submit');

// 查找 $_POST 中的所有 POST 标识符
$postIdentifierArr = array();

foreach (
$postNameArr as $postName)
{
if (
array_key_exists($postName, $_POST))
{
$postIdentifierArr[] = $postName;
}
}

// 每次应该只提交一个表单,因此我们应该有一个
// POST 标识符。 这里的 die 语句比较严格,您可以考虑
// 使用警告而不是 die 语句。
if (count($postIdentifierArr) != 1)
{
count($postIdentifierArr) < 1 or
die(
"\$_POST 包含多个 POST 标识符: " .
implode(" ", $postIdentifierArr));

// 我们还没有退出,所以一定少于一个。
die("\$_POST 不包含已知的 POST 标识符。" );
}

switch (
$postIdentifierArr[0])
{
case
'F1_Submit':
echo
"执行 F1_Submit 的实际代码。" ;
break;

case
'Modify':
echo
"执行 F2_Submit 的实际代码。" ;
break;

case
'Delete':
echo
"执行 F3_Submit 的实际代码。" ;
break;
}
}
else
// $_POST 为空。
{
echo
"执行没有 POST 数据的页面的代码。" ;
}
?>
To Top