2011-11-02 112 views
0

我正在嘗試爲當前登錄的用戶檢索訪問級別(admin/member/guest),並根據此情況向他們顯示我的頁面上的特定內容。我現在試圖用回聲測試它,但仍然無法獲得任何可打印的東西。有誰可以提供任何建議嗎?這個if語句不起作用 - 我做錯了什麼?

if(isset($_SESSION['username'])){ 

    global $con; 
    $q = "SELECT access FROM users WHERE username = '$username' "; 
    $result = mysql_query($q, $con); 

    if($result == 'guest') 
    { 
     echo "You are a guest";// SHOW GUEST CONTENT 
    } 
    elseif($result == 'member') 
    { 
     echo "You are a member"; // SHOW OTHER CONTENT 
    } 
    elseif($result == 'admin') 
    { 
     echo "You are an admin";// SHOW ADMIN CONTENT 
    } 

} 
+3

你有一些嚴重的SQL注入問題。 –

+4

提示:'$ result'不是一個字符串。 – Tomalak

+0

你把session_start();在腳本的最頂端? –

回答

2

$result是一個mysql資源。你需要

if(isset($_SESSION['username'])){ 

    global $con; 
    $q = "SELECT access FROM users WHERE username = '$username' LIMIT 1"; 
    $result = mysql_query($q, $con); 
    $row = mysql_fetch_assoc($result); 

    $access = $row['access']; 

    if($access == 'guest') 
    { 
     echo "You are a guest";// SHOW GUEST CONTENT 
    } 
    elseif($access == 'member') 
    { 
     echo "You are a member"; // SHOW OTHER CONTENT 
    } 
    elseif($access == 'admin') 
    { 
     echo "You are an admin";// SHOW ADMIN CONTENT 
    } 

} 
+0

感謝這很好,正是我所缺少的 – Bernard

1

$resultmysql_query返回是,你可以比較的字符串;它是一個resource。你需要從$result讀取該行:

$row = mysql_fetch_assoc($result) 
$access = $row['access']; 

if($access == 'guest') { 
    ... 
} 

... 

其他一些問題:

  • 您的查詢可能的SQL注入的問題。您不應該直接將變量的值插入到您的SQL查詢中,而無需首先正確地轉義它們。您可能需要使用mysql_real_escape_string
  • mysql正被棄用。您應該嘗試使用mysqli(MySQL改進版)或PDO(PHP數據對象)。
+0

如果你打算倒下,請解釋原因。但至少要感謝讓我的rep爲5的倍數。 –

+0

@alex * may *可能是有效的詞:D從不直接將值插入到SQL查詢中,這絕不是一種好的做法。 –

0

我看到兩個問題: 1.您需要使用session_start();在開始時。否則你的if語句將不會被執行。 2. mysql_query($ q,$ con)不返回字符串。它會返回一個記錄集。你需要使用mysql_fetch_assoc($ result);返回關聯數組。並從數組中檢索所需的值:
$ assoc_arr = mysql_fetch_assoc($ result); $ access = $ assoc_arr ['access'];

現在您可以比較$ access。

相關問題