PHP如果变量等于this或this

时间:2013-07-30 18:17:44

标签: php

我的PHP中有这个if语句:

if($_SESSION['usrName']!='test1'){
    header('location:login.php');
}

但我希望它是这样的:

if($_SESSION['usrName']!='test1' or 'user'){
    header('location:login.php');
}

但我无法弄清楚如何在PHP代码中执行此操作。我试过这个:

if($_SESSION['usrName']!='test1','user'){
    header('location:login.php');
}

而且:

if(($_SESSION['usrName']!='test1')||($_SESSION['usrName']!='user')){
    header('location:login.php');
}

有人可以帮忙吗?

6 个答案:

答案 0 :(得分:9)

您必须将||替换为&&。因为您只想在两个条件都为真时重定向。

if(($_SESSION['usrName']!='test1') && ($_SESSION['usrName']!='user')){
    header('location:login.php');
}

答案 1 :(得分:7)

if (!in_array($_SESSION['usrName'], array('test1', 'user')) {
    header('location:login.php');
}

这将检查变量$ _SESSION ['usrName']是否不在字符串列表中以简化其他允许的用户。

答案 2 :(得分:4)

正如其他人所说,你需要小心你的布尔逻辑 - (NOT X) || (NOT Y)相当于NOT (X AND Y),而你想要的是NOT (X OR Y),它相当于(NOT X) AND (NOT Y) }。

对于这种特殊情况,还有其他几个选项,尽管没有一个像你尝试的无效语法一样整洁。

首先,有in_array(),这很容易阅读,但如果你长篇名单中使用它会效率不高(对于像这样的简单情况,它不值得担心性能):

$allowed_users = array('test1', 'user');
if ( ! in_array($_SESSION['usrName'], $allowed_users ) { ... }

或者,您可以使用用户名 keys 构建哈希值;随着列表的增长,这会更有效,因为PHP可以在不循环遍历整个列表的情况下检查密钥:

$allowed_users = array('test1' => true, 'user' => true);
if ( ! array_key_exists($_SESSION['usrName'], $allowed_users) ) { ... }
// Or, if you don't mind PHP raising a few notices about accessing undefined keys
if ( ! $allowed_user[ $_SESSION['usrName'] ] ) { ... }

最后,您可以使用switch语句,标签不断落实,default案例充当“其他”:

switch ( $_SESSION['usrName'] )
{
    case 'test1':
    case 'user':
        // These users are allowed :)
    break;
    default:
        header('location:login.php');
}

您选择使用哪些内容(如果有的话)将取决于您希望代码在未来增长的方式,但它们是有用的技巧。

答案 3 :(得分:2)

你的最后一次尝试几乎是正确的。

...然而

if (var != something || var != something-else)

...将永远是真的,因为其中一个条件总是匹配。即使它等于一方,它也不会等于另一方。

当你测试两个这样的底片时,你需要使用AND(&&)而不是OR(||)。

if (($_SESSION['usrName']!='test1') && ($_SESSION['usrName']!='user'))

如果它不等于1,并且不等于另一个,则匹配。

答案 4 :(得分:1)

您需要执行以下操作:

if($_SESSION['usrName'] != 'test1' and $_SESSION['usrName'] != 'user'){
    header('location:login.php');
}

你的第一次尝试相当于:

if(($_SESSION['usrName']!='test1') or 'user'){
    header('location:login.php');
}

第二个似乎是无效的语法

第三种情况几乎是正确的,您只需要将||替换为and&&,因为任何内容都不等于'user'或'test1'

答案 5 :(得分:1)

目前,您正在检查其中一个条件是否为真。如果其中一个条件正确,则最后一个条件将评估为真。我假设您正在尝试检查两者条件是否为真。在这种情况下,您需要&&而不是||

尝试:

if( ($_SESSION['usrName'] != 'test1') && ($_SESSION['usrName'] != 'user') ) {
    header('location:login.php');
}