2

所以我对 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 != '')所以我的问题是在使用检查变量是否设置时我会遇到问题吗?

4

7 回答 7

2

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

于 2013-01-16T06:32:14.000 回答
2

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

if( !empty($_SESSION["username"]) ) {
...
于 2013-01-16T06:34:16.480 回答
0

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

于 2013-01-16T06:31:46.180 回答
0

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

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

于 2013-01-16T06:34:19.100 回答
0

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

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

如果变量没有像 Martin 在他的帖子中提到的那样设置,您也不会收到通知。

于 2013-01-16T06:35:48.050 回答
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'] != ''因此永远不会导致错误。

于 2013-01-16T06:36:03.183 回答
0

考虑到

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

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

if(array_key_exists('username', $_SESSION) ) {
   header('Location: welcomefriend.php');
} else {
   header('Location: getoutofhereyournotwelcome.php');
}
于 2013-08-21T17:18:12.000 回答