Моя форма входа возвращает неверное имя пользователя / пароль, даже если это правильно - PullRequest
0 голосов
/ 29 сентября 2018

Я создаю простую систему регистрации пользователей и входа в систему.Регистрация работает нормально и хранит пользователей в БД.Но когда я пытаюсь войти в систему, даже если я получаю правильное имя пользователя / пароль, он все равно возвращает, что это неверно.Я не могу найти проблему здесь, это код.Форма входа:

<form method="post" action = 'plogin.php'>
            <h2 class="sr-only">Login Form</h2>
            <div class="illustration"><i class="icon ion-ios-navigate"></i></div>
            <div class="form-group"><input class="form-control" type="email" name="email" placeholder="Е-маил"></div>
            <div class="form-group"><input class="form-control" type="password" name="password" placeholder="Лозинка"></div>
            <div class="form-group"><button class="btn btn-primary btn-block" type="submit">Најава</button></div><a href="#" class="forgot">Ја заборавивте лозинката? Кликнете овде.</a></form>

Проверка и проверка наличия имени пользователя и пароля:

<?php
session_start();

if(!empty($_POST)) {
    include('includes/general.php');
    if(!$connection){
        die("Failed to connect to database ".mysqli_connect_error());
    }
    $email = mysqli_real_escape_string($connection, $_POST['email']);
    $password = mysqli_real_escape_string($connection, $_POST['password']);
    $hashedPassword = hash('SHA256', $password);
    $query = "SELECT * FROM users WHERE email = '$email' AND password = '$password'";
    $result = mysqli_query($connection, $query) or die (mysqli_error($connection));
    if(mysqli_num_rows($result) > 0) {
        $_SESSION = mysqli_fetch_array($result);
        echo "<script>window.location.href = 'user.php';</script>";
    } else {
        echo "<script>alert('invalid username/password');
            window.location.href= 'login.php';</script>";

    }
} else {
    echo "<script>window.location.href = 'index.php';</script>";
}

Ответы [ 3 ]

0 голосов
/ 29 сентября 2018

Вы смешали свои переменные.Я предполагаю, что ваш пароль хранится в виде хэша, но вы сравниваете его с не хэшированным значением.

вместо этого попробуйте

$password = mysqli_real_escape_string($connection, $_POST['password']);
$hashedPassword = hash('SHA256', $password);
$query = "SELECT * FROM users WHERE email = '$email' AND password = '$hashedPassword'";

Даже если мне интересно, почему вы пытаетесь поместить полный результат в$ _SESSION.Я бы не стал этого делать, если вам нужно иметь некоторые значения в вашей сессии (например, userId, email и username или similiar), я бы просто сохранял их вместо всех столбцов в строке.Кроме того, выполнение запроса без указания столбцов, которые вы хотите получить, не является лучшей практикой, см. Эту тему для объяснения.

Возможно, вы захотите проверить PHP-ссылку для password_hash и password_verify для улучшения вашей концепции.

0 голосов
/ 29 сентября 2018

Эй, не используйте одинарные кавычки для переменных PHP, используйте строковый оператор con cat (.)

$query = "SELECT * FROM users WHERE email = '".$email."' AND password = '".$password."'";

0 голосов
/ 29 сентября 2018

Вы имели в виду

$query = "SELECT * FROM users WHERE email = '$email' AND password = '$hashedDassword'"; 

?

, а также я настоятельно рекомендую ПРОТИВ написания вашей собственной формы регистрации и регистрации, если это не для упражнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...