Php if($_POST) vs if(isset($_POST))


Php if($_POST) vs if(isset($_POST))

>我有一个简单的形式,如下所示:

<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)有不同的反应方式。

isset确定变量是否设置为空值。 $_POST将始终被设置,并且将始终是一个数组。

没有isset你只是在测试值是否真实。空数组(如果您不发布任何数据,则$_POST(将不是真实的。

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

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

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

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

主要区别是 isset 确定变量已设置并且对于 $_POST 不为空在这里不起作用,因为您没有在这里定义输入名称。$_POST 考虑输入名称/值对的数组。