2013-01-16 34 views
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 != '')来检查变量是否设置?

+1

使用这不是一个很好的检查,看看是否设置了变量。 '=='和'!=“在涉及到值时通常是”有问题的“;然而,如果一个变量(或数组索引)是“未设置”,那么有*无值*开始,这使得它更不适合。 – 2013-01-16 06:31:13

+0

if($ some_far)可能足以检查集 –

回答

2

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

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

我只在我的服务器上开发,所以我猜这个通知是被禁用的,所以它还没有引起任何问题。将来我会用'空',因为它似乎检查同样的事情。 – cantaffordretail

0

是的,如果表格已提交但未填写,$_POST["value"]==""会给您与isset($_POST["value"])不同的结果。另外,在未设置的情况下,$_POST["value"]==""会在某些服务器上出现错误。

2

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

0

察看$_SESSION['username']是空的,不检查是否存在实际上是$_SESSION阵列将抛出通知在username条目。对他们进行编码是一种很好的做法。其中一种方法就像if (isset($_SESSION['username']) && $_SESSION['username'] != '')

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

0

使用empty()if(!empty($some_far)) {来检查是否设置了$ _POST变量而不是空的。

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

如果该变量没有设置为马丁在他的文章中已经提到的话,您也不会收到通知。

0

我始终做到以下几点:

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

测试,如果指数在'username'首先在$_SESSION变量存在的if语句将意味着,如果索引不存在,那么我们就不会与$_SESSION['username'] != ''继续从而不会导致错误。

+0

'if(!empty($ _ SESSION ['username'])){'会做这个工作:) – Fabian

0

考虑

包含会话变量可用于当前脚本

为什么不使用提供的预定义功能的关联数组? array_key_exists

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