因此,我目前正在编写一个系统,当他们登录时,他们会得到一个专门的面板来显示他们的排名。
默认情况下,它们被称为User,管理员得到了Admin。
当我试图确认他们是行政人员的时候。
error_reporting(E_ALL); // i've been trying to find the bugs with this
require_once('db.php'); //using the good ol $conn = new mysqli
session_start();
if(!isset($_SESSION['username']) || empty($_SESSION['username'])){
header("location: login.php");
exit;
//to detect if they are logged in or not
}
//here is a failed attempt where I tried to "escape" the $_SESSION variable
// which still doesn't work
$username = $conn->real_escape_string($_SESSION['username']);
// I've tried this query with the $_SESSION variable escaped, with it's alias
// etc.
$query1 = "SELECT * FROM `users` WHERE `rank` = Admin AND
`username`='".$username."'";
// preparing to execute
$result = $conn->query($query1);
// this is where I detect if there is a row, set it to use Admin things
// which I will code later, for now just var holders.
if ($result->num_rows > 0) {
$rank = 'Admin';
} else {
$rank = 'User';
}我到处都找过非对象的属性,但我只找到了旧的2008年帖子,我试着去实现,但最后却没有用。
在PHP 7中使用XAMPP (apache)
发布于 2018-01-24 04:26:21
您需要更正您的SQL
"SELECT * FROM `users` WHERE `rank` = Admin AND `username`='".$username."'"至
"SELECT * FROM `users` WHERE `rank` = 'Admin' AND `username`='".$username."'"注:单引号在Admin之间
我建议改为使用下面的SQL,并将秩值直接存储到SESSION。
"SELECT rank FROM `users` WHERE `username`='".$username."'"发布于 2018-01-24 04:42:46
由于您使用的是mysqli,所以考虑使用准备语句。通过将变量值连接到查询字符串中,您很容易使用SQL注入!。
更多关于准备好的语句,在这里:Php.net/准备好的发言稿。
您还在查询中丢失了一些' ',尽管在使用准备语句时不需要在输入变量上添加任何撇号,而必须包含常量字符串周围的撇号(在示例rank='Admin'中缺少它们)。
这里是更正的代码:
注意:我将session_start()移到文档的顶部,以确保它正常工作,因为如果在调用函数之前发生任何输出,它将无法工作。
session_start();
error_reporting(E_ALL);
require_once('db.php'); //using the good ol $conn = new mysqli
if(empty($_SESSION['username']))
{
header("location: login.php");
exit();
}
$query1 = $conn->prepare("SELECT * FROM users WHERE rank='Admin' AND username=?");
$query1->bind_param("s", $_SESSION['username']);
$query1->execute();
$query1->store_result();
$result = $query1->num_rows;
if ($result > 0)
{
$rank = 'Admin';
}
else
{
$rank = 'User';
}https://stackoverflow.com/questions/48414748
复制相似问题