2011-11-02 109 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。

相关问题