2012-12-13 63 views
-1

我想創建一個基於用戶在數據庫中的訪問級別的菜單,用戶將顯示兩個不同的菜單之一。在PHP中比較會話變量

現在我的代碼如下:

if($_SESSION['acl'] == "Administrator"){ 
    echo $_SESSION['acl']; 
    echo "You are an administrator"; 
} 
{ 
    echo $_SESSION['acl']; 
    echo "You are a basic user"; 
} 

我的問題是,測試if語句總是失敗,並直接進入其他部分。任何幫助,將不勝感激。

回答

9

問題是你沒有一個else部分,你忘了寫字else!因此,底層代碼塊總是執行總是,這就是您總是看到它的原因。

關於爲什麼檢查用戶是否是管理員的頂部if()語句永遠不會被調用:這可能是因爲您正在訪問會話變量而未先在代碼的頂部調用session_start()。如果不是這樣,請確保您之前正確設置了該會話變量。

// start the session (required on all pages using session variables) 
session_start(); 

// I assume that for debug, you print the session variable 
echo $_SESSION['acl']; 

if($_SESSION['acl'] == "Administrator"){ 
    echo "You are an administrator"; 
} 
else 
{ 
    echo "You are a basic user"; 
} 

只是一個建議:我認爲代碼echo $_SESSION['acl'];只是爲了調試。我將它移動到session_start()之下,因爲這樣,它仍然總是被調用,但是你沒有寫兩次。

+0

我正要寫。假設發佈問題時不僅僅是一個錯字。 – NappingRabbit

0

用同樣的邏輯,會是這樣的:

if(isset($_SESSION['acl'])){ 
    if($_SESSION['acl'] == "Administrator"){ 
     echo 'You are an administrator'; 
     } 
    else{ 
     echo 'You are a basic user'; 
     } 
}else{ 
    echo 'Session "acl" was not set'; 
    }