Страница входа PHP / MySQL не перенаправляет - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь создать страницу входа в систему, которая запрашивает базу данных, чтобы проверить правильность имени пользователя и пароля, и разрешает доступ к следующим страницам с помощью сеансов. В настоящее время я просто использую XAMPP для проверки входа в систему. Это следующий код, который у меня есть на странице PHP.

<?php
  include("config.php");
  session_start();

  // Check for POST method
  if($_SERVER['REQUEST_METHOD'] == 'POST') {

    $username = stripslashes($_POST['username']);
    $username = mysqli_real_escape_string($con, $username);
    $password = stripslashes($_POST['password']);
    $password = mysqli_real_escape_string($con, $password);

    //Search database for username and password
    $stmt = $con->prepare("SELECT * FROM users
    WHERE username = ? LIMIT 1"); // Prepared statement
    $stmt->bind_param("s", $username);
    $stmt->execute();
    $result = $stmt->get_result();
    $user = $result->fetch_object();
    if(password_verify($_POST['password'], $user->password)) {
      echo("working");
      $_SESSION['loggedin'] = true;
      $_SESSION['user'] = $user->username;
      header("Location: index.php");
    } else {
      echo("no user");
    }
  }
?>

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Login</title>
</head>
<body>
  <form id="loginForm" method="post" action="">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="submit" name="submit" value="Login">
  </form>
</body>
</html>

Я добавил оператор echo только для того, чтобы посмотреть, будет ли он выводить «no user» для обоих наборов user / passwords в базе данных, а не в ней. Они оба отображают «нет пользователя», поэтому я не думаю, что я ищу базу данных правильно. Я новичок в PHP, и я использовал этот код .

UPDATE

Благодаря комментариям исправлены пароли, чтобы они были хешированы.

Когда он все еще не работал:

Установить тип данных пароля в базе данных как VARCHAR (60), рекомендуется VARCHAR (255)

Я понял, что это потому, что для меня установлен тип данных пароля VARCHAR (40). Поскольку я использовал bycrypt для хэширования, это строка из 60 символов. Я установил свой пароль на рекомендованный VARCHAR (255) на случай, если я решу использовать PASSWORD_DEFAULT в будущем. Мне не удалось понять, что все это упоминается в password_hash() документации при первоначальном создании базы данных и полей.

Добавлено session_start() на все страницы, ссылающиеся на $_SESSION[]

Повторяет var_dump(), чтобы отобразить результат password_verify(), который возвратил true, когда я ввел правильную информацию, однако страница все еще продолжала перенаправлять меня на вход. В PHP, на который я перенаправлял, у меня был этот раздел кода:

<?php
  if($_SESSION['loggedin'] == false) {
    header("Location: login.php");
  } else {
  }
?>

Я забыл поставить session_start(); на странице PHP, чтобы он продолжал перенаправлять меня к логину.

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