1

データベース内の人の「役割」に基づいて、セッションとページへのエントリを作成しようとしています。ロジックを釘付けにしたと思い、コードを作成しました。機能した。問題は、それは誰にとっても機能するということです。自分のコードが正しいのに論理的に正しくない理由を指摘するために、助けが必要でした。どんな助けでも大歓迎です。これが私のコードです。役割が「管理者」ではない人は誰でも参加できるようです。理由を特定できます。

function auth($email, $pass){
        global $result;

        while ($row = mysql_fetch_array($result)) {
            if($email == $row["email"] && $pass == $row["password"])
            {
                return true;
            }
        }
        return false;
    }

    function test($email, $pass){
        $test1 = auth($email, $pass); <--above
        if ($test1) {
           get_role($email); <-- below (This is the one where I'm puzzled)
        $_SESSION['email'] = true;
            header('location:menupage.php');
            exit;      
        }
        else{
            echo "Please enter correct username and password or <a href='register.php'>Register</a>";}
    }

    function get_role($email){
    global $connection;
    $sql="SELECT * FROM exam WHERE email= '$email'";
    $result = mysql_query($sql, $connection);
    confirm_query($result);
    while ($row = mysql_fetch_array($result)) {
        if ($row["role"] == 'Admin'){
                $_SESSION['role'] = true;
            }
            else
            $_SESSION['role'] = false;
    }


    }

これは、セッションがある管理ページのヘッダーです

<?php
session_start();
if(!isset($_SESSION['role']))
{   $_SESSION['msg'] = 'you are not logggedd in';
    header('location: menupage.php');
    exit;
}
?>
4

1 に答える 1

1

$_SESSION['role'] = falseまだ設定されている変数です。したがって、!isset($_SESSION['role'])期待どおりに評価されません。次のようなものを使用します:

管理ページ:

if($_SESSION['role'] === false){ ...
于 2012-04-04T21:47:00.327 に答える