未获得预期的用户信息

时间:2016-11-29 08:30:32

标签: php

我试图创建一个管理页面,并且只允许具有角色2的用户出于某种原因而没有向我提供我期望的信息。

<?php
    session_start();
    require_once('includes/mysql_config.php');

    $id = isset($_SESSION['id']) ? $_SESSION['id'] : header('location: login.php');
    $user = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']) || false;

    if($user['role'] == '2'){
      echo "Hello $user['name']";
    }
    else {
      header('location: index.php');
    }
?>

当我vardump($user)给它输出1时。

当我回显$_SESSION['id']时,它给了我正确的ID(会话ID与用户ID相同)。

3 个答案:

答案 0 :(得分:5)

现在您所做的是,您刚刚执行了查询并将结果集存储在$user中。 您需要从结果集中获取结果

$user = mysqli_fetch_array($user);

现在它应该按预期工作。

更新:您还应该处理以下内容:

  • 清理:确保您使用'作为值,`作为列名称。还可以使用mysqli_real_escape_string()来逃避一些明显的东西。
  • 验证:这是下一个最重要的问题。尝试检查结果集是否返回任何行。您可以使用mysqli_num_rows($user) > 0或准确地使用mysqli_num_rows($user) == 1
  • 变量:在示例中,我对结果集和行使用了相同的$user。最好有两个单独的变量,比如$userRes(对于结果集)和$userData(对于提取的数据)。

希望这可以回答你的问题。

答案 1 :(得分:0)

成功选择查询后mysqli_query()将返回一个mysqli_result对象。你必须仔细考虑才能得到你的结果。例如:

$user = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']) || false;
if(user ){
     // Cycle through results
    while ($row = user ->fetch_object()){
        $users[] = $row;
    }
    $user->close();

}

答案 2 :(得分:0)

您没有提取结果...如果您查看手册,并查找mysqli_query()的返回值,您会发现:

  

失败时返回FALSE。成功的SELECT,SHOW,DESCRIBE或   EXPLAIN查询mysqli_query()将返回一个mysqli_result对象。对于   其他成功的查询mysqli_query()将返回TRUE

所以继续拿下它:

//$user = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']) || false; // I'm unfamiliar with this || false stuff.
$result = mysqli_query($con, "SELECT * FROM users WHERE id =".$_SESSION['id']);
$user = mysqli_fetch_array($result);

清理输入(为了防止SQL注入)并检查mysqli_num_rows()是否有任何结果,这也是一个好主意。