我不能在if语句中得到“和”和“或”一起工作

时间:2013-08-28 15:08:28

标签: php session

我真的无法让这个工作。

用户帐户类型已分配给$ _SESSION [“user_type”]。

您有2种可以编辑订单的帐户类型。管理员(管理员)和子管理员(sadmin)。

“content_id”是根据页面类型显示的信息。

这句话怎么了?

是的。 ob_start();session_start();正在运行

//Disallow all users from edit orders. Except admins and Sub admins.
if ($_SESSION["user_type"] !== "admin" || $_SESSION["user_type"] !== "sadmin" && $_GET["content_id"] == "edit_order"){
  header ("location:home.php");
}

6 个答案:

答案 0 :(得分:1)

以下是一些基础知识:

true  || *anything* = true
false || false      = false
false && *anything* = false
true  && true       = true

现在我们已经建立了这个,让我们得到你想要的东西。

可以编辑页面的用户是admin或sub-admin。 相反,无法编辑页面的用户既不是管理员也不是子管理员。

这给了我们:非管理员和非子管理员的用户并且正在尝试访问编辑页面,发送到主页。

if ($_SESSION["user_type"] !== "admin" && $_SESSION["user_type"] !== "sadmin" && $_GET["content_id"] == "edit_order")
{
   header ("location:home.php");
}

顺便说一下,您使用!==检查用户类型的任何原因,但==检查内容ID?

答案 1 :(得分:0)

我认为这就是你要求的

//Disallow all users from edit orders. Except admins and Sub admins.
if (($_SESSION["user_type"] !== "admin" || $_SESSION["user_type"] !== "sadmin") && $_GET["content_id"] == "edit_order"){
  header ("location:home.php");
}

注意组合条件

附近的额外括号
$_SESSION["user_type"] !== "admin" || $_SESSION["user_type"] !== "sadmin" 

这告诉PHP它可以是admin或sadmin但它必须是edit_order

那说我认为存在一个逻辑错误,你实际上是指如果它不是管理员或者sadmin那么你想要重定向所以它应该是一个AND而不是OR

if ($_SESSION["user_type"] !== "admin" && $_SESSION["user_type"] !== "sadmin" && $_GET["content_id"] == "edit_order")

答案 2 :(得分:0)

//Disallow all users from edit orders. Except admins and Sub admins.
    if (($_SESSION["user_type"] !== "admin" || $_SESSION["user_type"] !== "sadmin") &&  $_GET["content_id"] == "edit_order"){
        header ("location:home.php");
}

http://www.php.net/manual/en/language.operators.precedence.php

注意:我认为你的情况不匹配,因为你的user_type总是与admin或sadmin不同(即使你是admin或sadmin)

您只需要“&&”

//Disallow all users from edit orders. Except admins and Sub admins.
    if ($_SESSION["user_type"] !== "admin" && $_SESSION["user_type"] !== "sadmin" &&  $_GET["content_id"] == "edit_order"){
    header ("location:home.php");
}

答案 3 :(得分:0)

AND优先于OR

你说:

condition1 || condition2 && condition3

PHP将此解释为:

condition1 || (condition2 && condition3)

相反,你想要:

(condition1 || condition2) && condition3

您需要自己将括号括在OR条件下。

答案 4 :(得分:0)

我认为应该是

//Disallow all users from edit orders. Except admins and Sub admins.
if ($_SESSION["user_type"] !== "admin" && ($_SESSION["user_type"] !== "sadmin" && $_GET["content_id"] == "edit_order")){
  header ("location:home.php");
}

答案 5 :(得分:-1)

PHP只会从左到右阅读语句,在内部分配truefalse

您需要做的是在括号中包含一些条件,以便将它们评估为一个条件。在你的情况下:

if (
    $_SESSION['user_type'] !== 'admin' ||
    ($_SESSION['user_type'] !== 'sadmin' && $_GET['content_id'] == 'edit_order')
) {
    header('Location: home.php');
}