我试图创建一个管理页面,并且只允许具有角色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相同)。
答案 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()
是否有任何结果,这也是一个好主意。