Код авторизации пользователя. Массив $user вместо того чтобы хранить в себе строку из бд, хранит единицу. Помогите пожалуйста вот код: PHP: <?php require_once("db.php"); if (!empty(($_POST['login'])) && !empty(($_POST['password']))) { $stmt = $conn->prepare("SELECT * FROM `users` WHERE login = ?"); $stmt->execute([$_POST['login']]); $user = $stmt->fetch(); if ($user) { if (password_verify($_POST['password'], $user['password'])) { session_start(); $_SESSION['user_id'] = $user['id']; $_SESSION['role'] = $user['role']; header("Location: account.php"); exit(); } else { header("Location: login_form.php?message=error_start_session"); exit(); } } else { header("Location: login_form.php?message=not_found_user"); exit(); } } else { header("Location: login_form.php?message=form_null"); exit(); }
Добрый день! Поробуйте так PHP: <?php require_once("db.php"); if (!empty(($_POST['login'])) && !empty(($_POST['password']))) { $stmt = $conn->prepare("SELECT id, role, password FROM `users` WHERE login = ?"); $stmt->execute([$_POST['login']]); $stmt->bind_result($id, $role, $password); $stmt->fetch(); if ($password) { if (password_verify($_POST['password'], $password) { session_start(); $_SESSION['user_id'] = $id; $_SESSION['role'] = $role; header("Location: account.php"); exit(); } else { header("Location: login_form.php?message=error_start_session"); exit(); } } else { header("Location: login_form.php?message=not_found_user"); exit(); } } else { header("Location: login_form.php?message=form_null"); exit(); } Редирект на login_form.php менять не стал. Попробуйте сделать не так грамоздко Удачи!
Посмотрите, как можно сделать проверку логина и пароля с выдачей сообщений, без перезагрузки страницы (т.е.без редиректов на login_form.php) PHP: <?php $message = ""; if ( filter_input(INPUT_POST, 'login') ) { require_once("db.php"); $stmt = $conn->prepare("SELECT id, role, password FROM `users` WHERE login = ?"); $stmt->execute([$_POST['login']]); $stmt->bind_result($id, $role, $password); $stmt->fetch(); if ($password) { if (password_verify($_POST['password'], $password)) { session_start(); $_SESSION['user_id'] = $id; $_SESSION['role'] = $role; $message="OK"; } else { $message="Incorrect password"; } } else { $message="Not found user"; } echo $message; exit; } echo <<<HTML <html> <head> <script> window.addEventListener("load", () => { var form = document.getElementById("log"); var go = document.getElementById("go"); var err = document.getElementById("error"); var inp = document.querySelectorAll("input"); //------------------------------------------------ for (i in [0,1]) { inp[i].addEventListener("click", () => { err.innerHTML=""; }); } //------------------------------------------------ form.addEventListener("submit", (e) => { e.preventDefault(); fd = new FormData(form); fetch("?", { method: "POST", body: fd, }) .then((response) => response.text()) .then((text) => { if(text == "OK") window.location = "account.php"; else err.innerHTML = text; }); }); //------------------------------------------------ }); </script> </head> <body> <form id="log" method="post" action=""> <input type="text" name="login" placeholder="Name" required> <input type="password" name="password" placeholder="Password" required> <input type="submit" id="go" value="Login"> <div id="error"></div> </form> </body> </html> HTML;
Не надо такие здоровые куски HTML выводить через echo, это потом трудно читать и сопровождать. Лучше, если уж хочется в одном файле и пыху и хтмл, закрывать режим PHP