<?php
session_start();
include("includes/db.php");
?>
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<title>Admin Login</title>
<link rel = "stylesheet" href = "css/bootstrap.min.css">
<link rel = "stylesheet" href = "css/login.css">
</head>
<body>
<div class = "container"><!-- container starts-->
<form class = "form-login" action = "" method = "Post"><!-- form-login starts-->
<h2 class = "form-login-heading"> Admin Login</h2>
<input type = "text" class = "form-control" name = "admin_email" placeholder = "Email Address" required>
<input type = "password" class = "form-control" name = "admin_pass" placeholder = "Password" required>
<button class = "btn btn-lg btn-primary btn-block" type = "submit" name = "admin_login">
Log In
</button>
</form><!-- form-login ends-->
</div><!-- container ends-->
</body>
</html>
<?php
if (isset($_POST['admin_login']))
{
$admin_email=mysqli_real_escape_string($con,$_POST['admin_email']);
$admin_pass=mysqli_real_escape_string($con,$_POST['admin_pass']);
$get_admin = "select * from admins where admin_email='$admin_email' AND admin_pass=' $admin_pass'";
$run_admin=mysqli_query($con,$get_admin);
$count=mysqli_num_rows($run_admin);
if ($count==1){
$_SESSION['admin_email']=$admin_email;
echo"<script>alert('You are logged in into admin panel')</script>";
echo"<script>window.open('index.php?dashboard','_self')</script>";
}
else{
echo"<script>alert('Email Or password is wrong')</script>";
}
}
?>
У меня проблема с моим запросом. На панели входа в систему, когда я пишу адрес электронной почты и пароль, которые я сохранил в своей базе данных, условие if не выполняется и выполняется другая часть кода, даже если я использую тот же пароль и адрес электронной почты, которые я сохранил в своей базе данных.
Вам действительно следует переключиться на использование password_hash и password_verify и никогда не хранить пароли в виде обычного текста в базе данных. И я не хочу слышать, что «это только для тестирования или временных целей» ... делайте это с самого начала, иначе вы создадите себе больше головной боли позже.
Никогда не интерполируйте данные клиента (например, $_POST) в строки SQL. Когда ваша БД будет взломана, это всего лишь вопрос времени. Также не полагайтесь на дезинфекцию, такую как mysqli_real_escape_string - это лучше, чем ничего. Вместо этого используйте подготовленные заявления. php.net/manual/de/mysqli.quickstart.prepared-statements.php Взгляните также на класс PDO.






Я только что заметил, что ваш запрос:
$get_admin = "select * from admins where admin_email='$admin_email' AND admin_pass=' $admin_pass'";
имеет пробел перед использованием переменной $ admin_pass.
Попробуйте настроить это на:
$get_admin = "select * from admins where admin_email='$admin_email' AND admin_pass='$admin_pass'";
Спасибо за вашу помощь
Рад помочь - отметьте этот ответ как правильный, если это сработало.
В вашем запросе есть место, куда вы передаете пароль администратора:
"AND admin_pass=' $admin_pass'"
должно быть:
"AND admin_pass='$admin_pass'"
Вместо того, чтобы исправлять эту ошибку, вам следует внести еще несколько серьезных изменений:
mysqli_real_escape_string, который поможет предотвратить SQL-I, он весьма подвержен ошибкам по сравнению с использованием подготовленных операторов.password_hash для генерации хэшей: http://php.net/manual/en/function.password-hash.php и password_verify для их проверки: http://php.net/manual/en/function.password-verify.phpХорошо, я буду следовать вашим инструкциям.
Попробуйте использовать var_dump ($ get_admin); внутри вашего else и вручную запустите полученный запрос.