2014-12-02 55 views
-1

所以我有一个登录脚本,基于登录用户的用户名创建$ _SESSION。在另一个页面上,我希望显示内容该用户的行有一个1。如果该行中有0,则不显示内容。无论我尝试了什么,我都遇到了问题,无论用户登录,它都不会显示YES。显示内容如果行== 1如果行== 0不显示

TEST1 = 1
TEST2 = 0

<? 
require_once 'dbinfo.php'; 

$sess = $_SESSION['authuser']; 

    $link = mysqli_connect($servername, $username, $password); 
    if (!$link) { 
    die('Could not connect: ' . mysqli_error($link)); 
    } 
    mysqli_select_db($link, $database) or trigger_error(mysqli_error($link)); 
    $acc = "SELECT username FROM admins WHERE username = '$sess'"; 
    $result = mysqli_query($link, $acc) or trigger_error(mysqli_error($link)); 
    ob_start(); 
    while($row = $result->fetch_assoc()) 
    { 
    if($row['access'] == 1) 
    { 
     echo 'YES'; 
    } 
    elseif ($row['access'] == 0) 
    { 
     echo 'NO'; 
    } 
    } 
    ob_end_flush() 
?> 

将溶液容易和Class指出来。忘记选择访问...而不是用户名。菜鸟的错误。

+1

你应该做的是开始使用参数化查询的第一件事。您现在查询的方式不会正确转义。接下来,在你的查询后查看'var_dump($ result);',看看你得到了什么。接下来,'var_dump($ _ SESSION)'。你是否在某个地方开始你的会议? – Brad 2014-12-02 04:20:08

+7

'选择访问...'你没有获取'access'列 – Class 2014-12-02 04:20:10

+0

哦,geeze。我现在觉得很愚蠢。谢谢上课,我错过了。我经历了几次不同的编码迭代,一定是错过了。 – gravvy 2014-12-02 04:27:49

回答

1

你必须写

session_start(); 
在您所有的文件希望利用 $_SESSION

而你的选择查询将只输出username列,因为你已经选择了只此一家,与

SELECT * FROM admins WHERE username = '$sess' 

SELECT username, access FROM admins WHERE username = '$sess' 

,而不是尝试。

你绝对应该做的是学习准备好的语句,因为你的实际查询是广泛开放的sql注入。

准备语句示例(from php.net

if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) { 

    $stmt->bind_param("s", $city); 

    $stmt->execute(); 

    $stmt->bind_result($district); 

    $stmt->fetch(); 

    $stmt->close(); 
} 

    $mysqli->close(); 

You can read more about mysqli prepared statements here

0

写入访问(列)并尝试使用isset()函数和运算符===当您在返回的变量中得到0时。