0

私は本当にこれを機能させることができません。

ユーザーのアカウント タイプは、$_SESSION["user_type"] に割り当てられます。

注文を編集できる 2 つのアカウント タイプがあります。管理者 (admin) とサブ管理者 (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");
}
4

6 に答える 6

1

以下にいくつかの基本事項を示します。

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

それを確立したので、あなたが望むものに取り掛かりましょう。

ページを編集できるユーザーは、管理者または副管理者です。逆に、ページを編集できないユーザーは、管理者でも副管理者でもありません。

非管理者かつ非サブ管理者であり、編集ページにアクセスしようとしているユーザーは、ホームページに送信されます。

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

ところで、!==ユーザー タイプのチェックに使用しているのに、==コンテンツ ID のチェックに使用している理由はありますか?

于 2013-08-28T15:18:35.547 に答える
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");
}
于 2013-08-28T15:14:32.117 に答える
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 でなければならないことを伝えます。

そうは言っても、実際には admin または sadmin でない場合にリダイレクトしたいという論理エラーがあると思うので、OR ではなく AND にする必要があります。

if ($_SESSION["user_type"] !== "admin" && $_SESSION["user_type"] !== "sadmin" && $_GET["content_id"] == "edit_order")
于 2013-08-28T15:10:53.963 に答える
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");
}
于 2013-08-28T15:12:48.013 に答える
0

ANDよりも優先されORます。

あなたが言った:

condition1 || condition2 && condition3

PHP はこれを次のように解釈します。

condition1 || (condition2 && condition3)

代わりに、次のことが必要です。

(condition1 || condition2) && condition3

OR自分で条件を括弧で囲む必要があります。

于 2013-08-28T15:13:38.817 に答える
-1

PHP はステートメントを左から右に、代入trueまたはfalse内部的にそのまま読み取ります。

あなたがする必要があるのは、いくつかの条件を括弧で囲んで、それらが 1 つとして評価されるようにすることです。あなたの場合:

if (
    $_SESSION['user_type'] !== 'admin' ||
    ($_SESSION['user_type'] !== 'sadmin' && $_GET['content_id'] == 'edit_order')
) {
    header('Location: home.php');
}
于 2013-08-28T15:12:33.370 に答える