Запрос ошибки php mysqli

<?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 не выполняется и выполняется другая часть кода, даже если я использую тот же пароль и адрес электронной почты, которые я сохранил в своей базе данных.

Попробуйте использовать var_dump ($ get_admin); внутри вашего else и вручную запустите полученный запрос.

Mark Overton 27.06.2018 15:45

Вам действительно следует переключиться на использование password_hash и password_verify и никогда не хранить пароли в виде обычного текста в базе данных. И я не хочу слышать, что «это только для тестирования или временных целей» ... делайте это с самого начала, иначе вы создадите себе больше головной боли позже.

IncredibleHat 27.06.2018 15:50

Никогда не интерполируйте данные клиента (например, $_POST) в строки SQL. Когда ваша БД будет взломана, это всего лишь вопрос времени. Также не полагайтесь на дезинфекцию, такую ​​как mysqli_real_escape_string - это лучше, чем ничего. Вместо этого используйте подготовленные заявления. php.net/manual/de/mysqli.quickstart.prepared-statements.php Взгляните также на класс PDO.

Quasimodo's clone 27.06.2018 15:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
3
92
2

Ответы 2

Я только что заметил, что ваш запрос:

$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'";

Спасибо за вашу помощь

Usama822 Ali 27.06.2018 16:07

Рад помочь - отметьте этот ответ как правильный, если это сработало.

Mark Overton 27.06.2018 16:09

В вашем запросе есть место, куда вы передаете пароль администратора:

"AND admin_pass=' $admin_pass'"

должно быть:

"AND admin_pass='$admin_pass'"

Вместо того, чтобы исправлять эту ошибку, вам следует внести еще несколько серьезных изменений:

  1. Не создавайте запросы, вручную добавляя переменные, переданные вашими пользователями, иначе вы будете уязвимы для атак с использованием SQL-инъекций. Вместо этого вы должны использовать подготовленные операторы. См. http://php.net/manual/en/mysqli.prepare.php. Хотя вы используете mysqli_real_escape_string, который поможет предотвратить SQL-I, он весьма подвержен ошибкам по сравнению с использованием подготовленных операторов.
  2. Не храните пароли в базе данных, вы должны как минимум хранить их в зашифрованном виде, но желательно хранить вместо этого хэш пароля. php даже имеет 2 функции, которые делают это для вас password_hash для генерации хэшей: http://php.net/manual/en/function.password-hash.php и password_verify для их проверки: http://php.net/manual/en/function.password-verify.php

Хорошо, я буду следовать вашим инструкциям.

Usama822 Ali 27.06.2018 16:08

Другие вопросы по теме