【发布时间】:2015-08-16 02:02:12
【问题描述】:
我想知道为什么:没有在我的 PHP 页面上单击表单上的提交按钮,_POST 变量已经设置好了。
比如我在网页上有这段代码:
if (isset($_POST)){
echo "XXXXXXX";
}
原来XXXXXX 是在页面第一次加载时回显的——此时我当然没有使用 POST 向服务器提交任何数据。为什么会这样?
【问题讨论】:
我想知道为什么:没有在我的 PHP 页面上单击表单上的提交按钮,_POST 变量已经设置好了。
比如我在网页上有这段代码:
if (isset($_POST)){
echo "XXXXXXX";
}
原来XXXXXX 是在页面第一次加载时回显的——此时我当然没有使用 POST 向服务器提交任何数据。为什么会这样?
【问题讨论】:
根据PHP.net 的规定,它是自动创建的。
这是一个“超全局”或自动全局变量。这仅仅意味着它在整个脚本的所有范围内都可用。没有必要做全局 $variable;在函数或方法中访问它。
为了解决您的代码,它已创建,但它是空的。
为了更好地测试用户是否发出了POST 请求,只需测试$_POST 上的索引,例如isset($_POST['someFieldName'])
您的代码应该测试它是否为空:
if(!empty($_POST)){
echo "a";
}
或
if(isset($_POST['someFieldName'])){
echo "a";
}
【讨论】:
$_POST 是一个超全局数组,它总是被设置。如果您不使用 post 方法将任何值传递给它,它将为空。所以给这个数组设置一个值并检查该值是否可用,如下所示:
if(isset($_POST['submit'])){
//Do this...
}
【讨论】:
$_GET 超全局也是如此。无论 HTTP 方法如何,这些都始终设置。您可以通过检查REQUEST_METHOD 来检查请求是否为POST、GET、PUT 等
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
// this was an HTTP POST request
}
【讨论】:
检查变量是否为空。 $_POST 将始终设置。
所以类似下面的东西应该可以工作:
if(!empty($_POST['textFieldName'])){
echo "XXXXXXX";
}
【讨论】:
$_POST 是超全局的,它总是设置为一个空数组。 试试这个,只是为了更好地理解:
if(!is_null($_POST))
{
print_r($_POST);
}
为什么这会帮助你理解? - 因为 isset 检查变量是否已设置且不为 NULL。
【讨论】: