【问题标题】:PHP if else ignores after "OR/||" OperatorPHP if else 在 "OR/||" 之后忽略操作员
【发布时间】:2013-04-08 07:24:43
【问题描述】:

您好,这行代码有问题。

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

如果访问级别不是 superadminadmin 但我的 if else 忽略了 || 之后的“admin”,这是一条快速行,它将注销用户操作员。对于我可能做错的任何帮助,我将不胜感激。谢谢。也试过&&还是不行。

【问题讨论】:

    标签: php comparison-operators


    【解决方案1】:

    只需将您的 if 修复为以下内容:

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

    在你的代码中有两个条件

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

    这被解释为:

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

    和条件

     "admin"
    

    与 true 等价,因为它没有空值,所以它总是会通过 if 语句

    【讨论】:

    • 非常感谢。工作正常再次感谢。从中学到了很多。
    【解决方案2】:

    正确的代码:

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

    【讨论】:

      【解决方案3】:

      试试这个

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

      【讨论】:

        【解决方案4】:

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

        看看PHP manual

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-10
          • 1970-01-01
          • 1970-01-01
          • 2013-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-24
          相关资源
          最近更新 更多