Система входа с паролем_verify () - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь создать систему входа в систему с хэшированными паролями. Что должно произойти, так это то, что после того, как я нажму на кнопку «Отправить», должна быть создана сессия, и я буду перенаправлен на дом. php. Если входные данные не совпадают с данными в базе данных, я должен получить предупреждения «Ошибка 1» или «Ошибка 2». Моя проблема в том, что когда я нажимаю кнопку отправки, все, что происходит, - это то, что меня перенаправляют на вход в систему. php. Я не получаю ошибок и предупреждений, только пустой экран с логином. php URL.

Я пытаюсь понять, как заставить работать пароль password_verify (). Приветствуется любая помощь.

Изображение базы данных: https://imgur.com/a/BXiHBN4 Изображение того, что происходит после попытки входа в систему: https://imgur.com/a/qKZ1tsi

Код формы:

<html>

<head>

<title> Login now! </title>

<meta charset="UTF-8">

<link rel="stylesheet" type="text/css" href="css/style.css"/>

</head>

<body>

<header>

  <div class="alignRight">
    <a href="registration.html"> Register </a> &nbsp; &nbsp;
  </div>

  <div class="alignLeft">
    <a href="contact.html"> Contact us </a> &nbsp; &nbsp; 
    <a href="aboutus.html"> About us </a> &nbsp; &nbsp;
    <a href="news.html"> News </a>
  </div>

</header>

<h1> Welcome back! </h1>

<h2> Log in to continue with your work. </h2> 

<form name="login-form" id="login-form" action="login.php" method="post">

    <input class="_40" type="text" name="username"  pattern="[a-zA-Z0-9_]{1,15}" 
placeholder="Username"  required /> 

    <br />

    <input class="_40" type="password" name="pwd"  placeholder="Password"  required />

    <br />

    <input id="loginSubmitButton" type="submit" value="Submit"  /> 

</form>

</body>

</html>

PHP код:

<?php


session_start();

$servername ="localhost";
$username = "root";
$password = "";

$link = mysqli_connect($servername, $username, $password);

mysqli_select_db($link, "users");


$username = mysqli_real_escape_string($link, $_POST["username"]);
$pwd = mysqli_real_escape_string($link, $_POST["pwd"]); 
$query = "SELECT * FROM users WHERE Username = '$username'";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_assoc($result);

if(($result->num_rows > 0))
{
    while($row = mysqli_fetch_array($result))
    {
        if(password_verify($pwd, $row["Hash"]))
        {
            $_SESSION["username"] = $username;
            header("location:home.php");
        }
        else
        {
            echo '<script>alert("Error 1")</script>';
        }
    }
}
else
{
    echo '<script>alert("Error2")</script>';
}


?>

1 Ответ

2 голосов
/ 19 февраля 2020

Кажется, я вижу проблему.

Похоже, что вы, вероятно, выбираете единственную строку из результатов перед if

$row = mysqli_fetch_assoc($result);

Затем, когда вы получаете снова здесь, есть ничего не осталось извлечь.

if(($result->num_rows > 0))
{
    while($row = mysqli_fetch_array($result))

(я предполагаю, что запрос вернет только одну строку, так как имя пользователя уникально.)

...