PHP如果在“OR / ||”之后忽略操作者

时间:2013-04-08 07:24:44

标签: php comparison-operators

嗨,我对这行代码有疑问。

if($_SESSION['permission'] !=  "superadmin" || "admin"){
    //header("location:logout.php");
    echo $_SESSION['permission'];
}

如果访问级别不是 superadmin admin ,那么会快速注销用户,但我的if else忽略了||之后的“admin”运营商。非常感谢我能做错的任何帮助。谢谢。还试过&&它仍然不起作用。

4 个答案:

答案 0 :(得分:2)

将你的if修改为以下内容:

if($_SESSION['permission'] !=  "superadmin" &&  $_SESSION['permission'] != "admin"){

在你的代码中你有两个条件

$_SESSION['permission'] !=  "superadmin" || "admin"

这被解释为:

$_SESSION['permission'] !=  "superadmin"
OR 
"admin"

和条件

 "admin"

等于true,因为它没有空值,因此它将始终传递if statment

答案 1 :(得分:0)

正确的代码:

if($_SESSION['permission'] !=  "superadmin" && 
$_SESSION['permission'] !=  "admin" 
){
             //header("location:logout.php");
             echo $_SESSION['permission'];
        }

答案 2 :(得分:0)

试试这个

    if(($_SESSION['permission'] !=  'superadmin') && ($_SESSION['permission'] != 'admin'))   
     {
         //header("location:logout.php");
         echo $_SESSION['permission'];
    }

答案 3 :(得分:0)

PHP对OR使用“短路”(即使对于AND和其他逻辑运算符)语句。
这意味着 - 如果是OR运营商 - 如果第一个条件是TRUE,则不评估第二个条件。
而且,我不确定你的语法是否“好”;这是因为(无论短路)前两个字符串将被比较(结果将是"superadmin";这是因为两个字符串是两个true值,因为它们有一个值而不是{ {1}})然后,此值将与会话变量

进行比较

查看PHP manual

如果你想正确地重写它,你必须做这样的事情

null