Php if($ _ POST)vs if(isset($ _ POST))

时间:2016-01-05 10:12:47

标签: php post isset

我有一个简单的表格,如下所示:

<form action="" method="post">
  <input type="text" />
  <input type="submit" value="SEND" />
</form>

当我尝试通过if($_POST)接收从此表单发送的数据时,我失败了,但在尝试使用isset时,我成功了。

if($_POST){
  echo 'a'; //Doesn't print anything.
}
if(isset($_POST)){
  echo 'b'; //Prints 'b'
}

我猜其背后的原因是我的表单输入中缺少name属性,但我无法理解为什么if($_POST)isset($_POST)在这种情况下会有不同的反应方式。

4 个答案:

答案 0 :(得分:13)

isset 确定变量是否已设置且不是NULL $_POST将始终设置,并且始终为数组。

如果没有isset,您只是测试该值是否真实。一个空数组(如果您没有发布任何数据,$_POST将会是真的)。​​

答案 1 :(得分:1)

isset确定是否设置了变量而不是NULL,请参阅手册: http://php.net/manual/en/function.isset.php

if($_POST)检查$_POST是否为真。

在您的情况下,$_POST将始终设置。如果使用与表单无关的其他变量执行此操作,请记住检查if($var)而不知道它是否已设置,将发出通知。检查if(isset($var))不会发出通知。

与您的问题无关:如果您想知道$_POST数组中是否有数据,您可以尝试使用count($_POST),请参阅: http://php.net/manual/en/function.count.php

答案 2 :(得分:1)

这是因为$_POST是一个输入名称/值对的数组,并且在您的表单中没有输入有任何名称,因此它是一个空数组(计算结果为false)。您可以var_dump($_POST)验证它。

尝试为文本输入添加名称以访问其值:

<form action="" method="post">
  <input type="text" name="somename" />
  <input type="submit" value="SEND" />
</form> 

答案 3 :(得分:0)

主要区别是 isset 确定变量已设置且不为空 $ _ POST 在此处不起作用,因为您未在此处定义输入名称。 $ _ POST 会考虑一组输入名称/值对。