为什么我的if语句运行,即使要求不为真


Why is my if statement running even though the requirements aren't true?

我正在制作一个按钮,我只希望管理员查看。每个用户在数据库中都有一个排名,如果排名被设置为"a",他们就有管理权限。这适用于其他页面,例如查看"管理面板"页面等,但由于某些原因,这里没有。即使您没有登录,您也可以查看特殊按钮。

$viewer = htmlentities($_SESSION['user']['username'], ENT_QUOTES, 'UTF-8');
    $sql33="SELECT * FROM users WHERE username='$viewer'";
    $result33 = $mysqli->query($sql33);
    $rows33=$result33->fetch_assoc();
    if(isset($_SESSION['user']['username']) AND $_SESSION['user']['rank'] == "a" or "p") {
    ?><a href="deletepost.php?id=<? echo $id ?>"><input type="submit" value="DELETE"></a><?
    }

按钮显示无论什么,当我没有登录这个错误发生:

Notice: Undefined index: user in /home/parap00per/public_html/view_topic.php on line 62

第62行是我定义$viewer的地方。

我认为这是因为没有会话,如果你没有登录,但即使当我登录到一个帐户,没有管理权限(既不是"a"也不是"p")这个if语句仍然运行,按钮仍然出现。我做错了什么吗?我以前在其他页面上使用过$_SESSION['user']的东西,我所需要使用的只是包含一个名为common.php的文件,它包含在这个页面上。

所以我的问题是:为什么这个if语句运行,即使它不是真的?

您需要显式地比较$_SESSION['user']['rank']"p""a":

if(isset($_SESSION['user']['username']) && 
        ($_SESSION['user']['rank'] == "a" || $_SESSION['user']['rank'] == "p") {
    ?><a href="deletepost.php?id=<? echo $id ?>"><input type="submit" value="DELETE"></a><?
}

否则,将$_SESSION['user']['rank'] == "a""p"视为两个单独的表达式。"p"的计算结果为true,这不是您想要的。

试试:

if(isset($_SESSION['user']) && isset($_SESSION['user']['username']) && isset($_SESSION['rank']) && ($_SESSION['rank'] == "a" || $_SESSION['rank'] == "p"))) {?>
     <a href="deletepost.php?id=<? echo $id ?>"><input type="submit" value="DELETE"></a><?
}

if语句

if(isset($_SESSION['user']['username']) AND $_SESSION['user']['rank'] == "a" or "p")

结尾的p总是为true,所以你必须把你的语句括起来,像这样:

if(isset($_SESSION['user']['username']) && (($_SESSION['user']['rank'] == "a") || ($_SESSION['user']['rank'] == "p"))