为什么即使要求不正确,我的if语句也会运行?

时间:2014-08-20 14:46:09

标签: php session

我正在创建一个我只希望管理员查看的按钮。每个用户在数据库中都有一个等级,如果等级设置为" 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的位置。

我认为这是因为如果你没有登录就没有会话,但即使我登录的帐户没有管理员访问权限(也没有#&#) 34; a&#34;也&#34; p&#34;)此if语句仍然运行且按钮仍然出现。我有什么不对的吗?我之前在其他页面上使用了$ _SESSION [&#39;用户&#39;]的东西,我需要使用的是包含一个名为common.php的文件,该文件包含在此页面中。

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

3 个答案:

答案 0 :(得分:1)

您需要明确地将$_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"评估为真,这不是你想要的。

答案 1 :(得分:0)

尝试使用:

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><?
}

答案 2 :(得分:0)

在你的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"))