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

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

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

"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
0 голосов
/ 27 июня 2018

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

$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'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...