php:if($ some_var!='')vs. isset / empty

时间:2013-01-16 06:29:01

标签: php isset

所以我对php很新,但在我真正理解之前,我养成了这个习惯。在检查是否设置了$_SESSION / $_POST / $_GET变量时,请使用此代码:

if($_SESSION['username'] != '' {
 //allow access
 header('Location: welcomefriend.php')
}
else {
 //get out
 header('Location: getoutofhereyournotwelcome.php')
}

我在登录脚本中使用它来检查会话是否设置为允许访问等等。所以现在我知道isset / empty,但我似乎总是遇到问题。

所以我的问题是,在使用if($some_far != '')检查变量是否设置时,我是否会遇到问题?

7 个答案:

答案 0 :(得分:2)

是的 - 如果数组中不存在索引,它会发出通知。

答案 1 :(得分:2)

如果变量不存在,那将显示通知,所以:

if( !empty($_SESSION["username"]) ) {
...

答案 2 :(得分:0)

是的,如果表单已提交但未填写,$_POST["value"]==""将为您提供与isset($_POST["value"])不同的结果。此外,$_POST["value"]==""在某些服务器未设置时会给您一个错误。

答案 3 :(得分:0)

检查$_SESSION['username']是否为空,而不检查username数组中是否存在$_SESSION条目将引发通知。围绕它们进行编码是一种很好的做法。一种方法是if (isset($_SESSION['username']) && $_SESSION['username'] != '')

至于empty() vs != "",这是个人偏好。您可能遇到的一个问题是empty()不接受值,只接受引用,因此您无法empty(somefunction($_SESSION['username']))

答案 4 :(得分:0)

使用empty() if( !empty( $some_far ) ) {检查$ _POST变量是否已设置且不为空。

如果变量也可以为空但必须设置为if( isset( $some_far ) ) {
使用isset()时,变量也不能为NULL以返回true。

如果变量未设置为马丁已经在他的帖子中提到过,你也不会收到通知。

答案 5 :(得分:0)

我总是这样做:

if (isset($_SESSION['username']) && $_SESSION['username'] != '') {
  //allow access
  header('Location: welcomefriend.php')
}
else {
  //get out
  header('Location: getoutofhereyournotwelcome.php')
}

在if语句中首先测试'username'变量中是否存在索引$_SESSION意味着如果索引不存在,那么我们将不再继续$_SESSION['username'] != ''因此从不导致错误。

答案 6 :(得分:0)

考虑

  

包含当前脚本可用的会话变量的关联数组

为什么不使用预定义的功能? array_key_exists

if(array_key_exists('username', $_SESSION) ) {
   header('Location: welcomefriend.php');
} else {
   header('Location: getoutofhereyournotwelcome.php');
}