【发布时间】:2021-11-28 10:48:22
【问题描述】:
if (isset($_POST['login_btn'])) {
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
if (empty($username)) {
array_push($errors, "Username is Required");
}
if (empty($password)) {
array_push($errors, "Password is Required");
}
if (count($errors) == 0) {
$password = md5($password);
$query = "SELECT * FROM request WHERE username='$username' AND password='$password' ";
$results = mysqli_query($db, $query);
if (mysqli_num_rows($results) == 1){
$logged_in_user = mysqli_fetch_assoc($results);
if ($logged_in_user['user_type'] == 'admin') {
$_SESSION['user'] = $logged_in_user;
$_SESSION['success'] = "Welcome Admin";
header('location: admin/home.php');
}elseif($logged_in_user['user_type'] == 'employee') {
$_SESSION['user'] = $logged_in_user;
$_SESSION['success'] = "Welcome Employee";
header('location: admin/employee.php');
}else{
$_SESSION['user'] = $logged_in_user;
$_SESSION['success'] = "Welcome User";
header('location: index.php');
}
}else {
array_push($errors, "Wrong username/password combination");
}
}
}
if (isset($_POST['login_btn'])) {
$username = mysqli_real_escape_string($db, $_POST['username']);
$password = mysqli_real_escape_string($db, $_POST['password']);
if (count($errors) == 0) {
$password = md5($password);
$query = "SELECT * FROM request WHERE username='$username' AND password = '$password'";
$check_user=mysqli_query($db,$query);
if (mysqli_num_rows($check_user)==1){
$approved_by_admin = mysqli_fetch_assoc($check_user);
if($approved_by_admin ["status"] =='approved'){
echo '<script type = "text/javascript">';
echo 'alert("Login Success!")';
echo 'window.location.href = "index.php"';
echo '</script>';
}
elseif($approved_by_admin ["status"] =='pending'){
echo '<script type = "text/javascript">';
echo 'alert("Your account is still pending for approval!")';
echo 'window.location.href = "login.php"';
echo '</script>';
}
}else{
echo "Wrong Combination";
}
}
}
我的批准和待定查询不起作用。
如果我删除对管理员、员工和用户的查询,它会起作用,但这不会起作用 echo 'window.location.href = "index.php"';
基本上我的代码不起作用,因为即使用户的状态为待处理且未经管理员批准,它也会继续登录。
if (isset($_POST['login_btn'])) { 的第二部分等待和批准不起作用
【问题讨论】:
-
请不要使用过时的、不安全的 md5 算法存储密码 - 这是一种安全风险。改为了解 PHP 内置的、最新的、安全的 password hashing and verification functions。
-
无论如何...您希望
$results包含多少行数据?$logged_in_user = mysqli_fetch_assoc($results);将检索第一行。然后稍后您将执行$approved_by_admin = mysqli_fetch_assoc($results);,它将尝试从相同的结果中获得第二行。你确定你不应该只是试图从你已经检索到的行中读取状态吗? -
此外,如果用户已登录,您将通过 Location 标头重定向用户,但随后尝试根据不同条件使用 JS 重定向他们。某处也缺少
}。整个代码看起来很混乱,不清楚你实际上试图实现什么规则。 -
对不起,我减少了我的代码,因为它是一样的
-
我在等待和批准时遇到问题