我的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');
}
有人可以帮忙吗?
答案 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');
}