我真的无法让这个工作。
用户帐户类型已分配给$ _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");
}
答案 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只会从左到右阅读语句,在内部分配true
或false
。
您需要做的是在括号中包含一些条件,以便将它们评估为一个条件。在你的情况下:
if (
$_SESSION['user_type'] !== 'admin' ||
($_SESSION['user_type'] !== 'sadmin' && $_GET['content_id'] == 'edit_order')
) {
header('Location: home.php');
}