Loggin в php не работает

#php #error-logging

#php #протоколирование ошибок

Вопрос:

я новичок в php, и я пытаюсь создать страницу регистрации и входа в систему.

Когда я регистрируюсь как новый пользователь, он работает нормально и появляется в базе данных.Однако, когда дело доходит до входа в систему, кажется, проблема в том, что я перепробовал все.

что я хочу сделать, так это то, что когда пользователь входит в систему, он перенаправляет их на домашнюю страницу, и если информация о входе в систему была неверной, тогда будет отображаться сообщение об ошибке.

Вот код php, который находится в файле входа в систему:

     <?php

session_start();

if( isset($_SESSION['users_id'])    ){
    header("Location: /");
}

require 'database.php';

if(!empty($_POST['email']) amp;amp; !empty($_POST['password'])):

    $records = $conn->prepare('SELECT id,email,password FROM users WHERE email = :email');
    $records->bindParam(':email', $_POST['email']);
    $records->execute();
    $results = $records->fetch(PDO::FETCH_ASSOC);

    $message = '';

    if(count($results) > 0 amp;amp; password_verify($_POST['password'], $results['password'])  )
    {
        $_SESSION['users_id'] = $results['id'];
        header("Location: php.dev/index.php", true, 301);   exit();
    } 
    else {
        $message = 'Sorry, thoes credentials do not match';
    }

endif;

?>
  

похоже, header("Location:....) это не работает. я действительно застрял здесь, какая-нибудь помощь?

Вот html-код:

  <!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
<link href="Style/phpstyle.css" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Lobster" rel="stylesheet">

</head>

<body>

<div class="header">
    <a href="php.dev/index.php"> TIPBUCKET </a>
</div>

<?php if(!empty($message)): ?>
    <p><?= $message ?></p>
<?php endif; ?>

<h1>Login</h1>

<span> or <a href="register.php">Register here</a></span>

<form action="login.php" method="POST">

<input type="text" placeholder="enter your email" name="email">

<input type="password" placeholder="Password" name="password">

<input type="submit">

</form>

</body>
</html>
  

Это то, что происходит, когда я вхожу в систему

Заранее благодарю вас за любые ответы 🙂

Комментарии:

1. Что php.dev/index.php должно быть? Конечно, это не URL…

2. я использую MAMP локального хоста, поэтому текущий URL-адрес — php.dev и index.php это домашняя страница

3. Допустимый URL-адрес будет http://php.dev/index.php . php.dev/index.php это просто некоторая произвольная строка с точками и косой чертой в ней.

4. вероятно, вам следует опубликовать html-форму для этого и схему базы данных. это может быть что угодно, начиная с формы (входные данные, метод и т.д.) и / или вплоть до недостаточной длины столбца пароля. Какое значение для одного пароля? проверьте наличие ошибок с помощью отчетов об ошибках php и обработки ошибок в PDO.

5. вероятно, вы также выводите заголовок before. Используйте отчеты об ошибках, затем вернитесь и сообщите нам, в чем ошибка, если таковая имеется.

Ответ №1:

У вас опечатка в вашем заголовке:

 header("Location: php.dev/index.php", ture, 301);
  

должно быть

  header("Location: php.dev/index.php", true, 301);
  

Комментарии:

1. Хорошие глаза. Но все равно происходит то же самое

2. некоторые из них пропускают «if{count($results)…………}» и переходит к строке «else {$message …… }» и просто показывает «Извините, ваши учетные данные не совпадают»

3. Можете ли вы также опубликовать функцию password_verify ? Это может быть источником ваших проблем (поскольку он пропускает оператор if)

4. @BananasSplitter password_verify встроен php.net/manual/en/function.password-verify.php