Как я могу исправить мою php невозможность получить имя пользователя и пароль из базы данных mySQL? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь сделать простой вход в систему с базой данных mySQL. На данный момент я могу нормально подключиться к базе данных, но по какой-то причине я не могу на всю жизнь понять, почему он не принимает данные для имени пользователя и пароля (не беспокоится о праве хэширования). сейчас это просто практика). Каждый раз, когда я его набираю, выдается только сообщение об ошибке, и я пытаюсь использовать пользовательский «тест» с паролем «123», так что я знаю, что не пишу это неправильно. Помимо моего сообщения об ошибке, оно не говорит, что что-то еще не так вообще. Вот как выглядит мой логин:

<?php

//Start PHP session

session_start();

require_once("db_config.php");

function sanitize($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

//Check if the form has been submitted

if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') {
    if (isset($_POST['pass']) && isset($_POST['user'])) {

        //Predefine variables
        $validationed = false;
        $err_msg = "";

        //Username and password has been submitted by the user
        //Receive and sanitize the submitted information

        $user = sanitize($_POST['user']);
        $passwd = sanitize($_POST['pass']);

        $user = mysqli_real_escape_string($conn, $user);

        $sql = "SELECT * FROM user_logins WHERE username = '$user';";

        $result = mysqli_query($conn, $sql) or die(mysqli_error($conn));
        $row_count=mysqli_num_rows($result);

        //If the record is found, check password.
        if ($row_count > 0) {
            $row = mysqli_fetch_assoc($result);
            if (password_verify($passwd, $row['pass'])) {
                $validationed = true;
            }
        }

        if ($validationed === false) {
            // If the check completes without finding a valid login, set the error message.
            $err_msg = "Invalid Login...Please Try Again";
        } else {
            // redirect to the main page of the website.  
            header("Location: travel.php");
            exit();
        }
    }
} 

else {
    session_destroy();
    session_unset();
    session_start();
}

?>

<body id="LoginForm">

    <div class="container">
      <div class="login-form">
        <div class="main-div">
          <div class="panel">
            <h1>Login</h1>
            <p>Please enter your username and password</p>

          </div>
          <?php
            //If $err_msg is set, display the message
            if(isset($err_msg)) {
              echo('<div class="alert alert-danger" role="alert">');
              echo('  <strong>' . $err_msg . '</strong>');
              echo('</div>');
            }
          ?>

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

            <div class="form-group">
              <input type="username" class="form-control" name="user" placeholder="Username">
            </div>
            <div class="form-group">
              <input type="password" class="form-control" name="pass" placeholder="Password">
            </div>
            <button type="submit" class="btn btn-primary" name='submit'>Login</button>
          </form>
        </div>
      </div>
    </div>

  </body>

Я пытаюсь получить доступ к 'username' и 'pass' из таблицы 'user_logins'. Очевидно, что-то я сделал неправильно, но я не могу это понять. Было бы здорово помочь, если бы кто-то мог просмотреть это и сказать мне, если они видят что-то не так! Спасибо!

1 Ответ

1 голос
/ 01 мая 2020

При использовании password_verify для сравнения пароля и га sh необходимо убедиться, что значение га sh было создано с использованием сопутствующая функция password_hash. Эти две функции работают рука об руку.

Таким образом, вы либо сравниваете оба значения напрямую, либо сохраняете пароль в его хешированном виде в БД (используя password_hash).

if ($passwd == $row['pass']) {
    $validationed = true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...