Существует бд, в которую при регистрации вводятся данные: логин и пароль, но при авторизации происходит ошибка: Неверный логин или пароль В чём моя ошибка и как её можно исправить? И почему может не записываться в бд почта, если она вводиться при регистрации? бд Файл авторизации: <?php session_start(); require_once "db_connection.php"; if(isset($_POST['submit'])){ $username = $_POST['username']; $password = $_POST['password']; // проверка логина и пароля $sql = "SELECT * FROM users WHERE username='$username'"; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_assoc($result); if($row && password_verify($password, $row['password'])){ $_SESSION['id'] = $row['id']; $_SESSION['username'] = $row['username']; $_SESSION['access_level'] = $row['access_level']; // перенаправление на нужную страницу в зависимости от категории доступа if($_SESSION['access_level'] == "admin"){ header("Location: admin_panel.php"); } else { header("Location: profile.php"); } } else { echo "Неверный логин или пароль"; } } ?> PHP <?php session_start(); require_once "db_connection.php"; if(isset($_POST['submit'])){ $username = $_POST['username']; $password = $_POST['password']; // проверка логина и пароля $sql = "SELECT * FROM users WHERE username='$username'"; $result = mysqli_query($conn, $sql); $row = mysqli_fetch_assoc($result); if($row && password_verify($password, $row['password'])){ $_SESSION['id'] = $row['id']; $_SESSION['username'] = $row['username']; $_SESSION['access_level'] = $row['access_level']; // перенаправление на нужную страницу в зависимости от категории доступа if($_SESSION['access_level'] == "admin"){ header("Location: admin_panel.php"); } else { header("Location: profile.php"); } } else { echo "Неверный логин или пароль"; } } ?> Файл коннекта с бд: <?php // Данные для подключения к базе данных define('SERVER','localhost'); define('DB_NAME','bump'); // Создание соединения с базой данных $conn= mysqli_connect(SERVER,'root','',DB_NAME); // Проверка соединения if (!$conn) { die("Ошибка соединения: " . mysqli_connect_error()); } // Получение данных об уровне доступа function get_user_access_level($username) { global $conn; $query = "SELECT access_level FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $query); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); return $row['access_level']; } return false; } // Получения данных по почте function get_user_email($username) { global $conn; $query = "SELECT email FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $query); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); return $row['email']; } return false; } ?> PHP <?php // Данные для подключения к базе данных define('SERVER','localhost'); define('DB_NAME','bump'); // Создание соединения с базой данных $conn= mysqli_connect(SERVER,'root','',DB_NAME); // Проверка соединения if (!$conn) { die("Ошибка соединения: " . mysqli_connect_error()); } // Получение данных об уровне доступа function get_user_access_level($username) { global $conn; $query = "SELECT access_level FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $query); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); return $row['access_level']; } return false; } // Получения данных по почте function get_user_email($username) { global $conn; $query = "SELECT email FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $query); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); return $row['email']; } return false; } ?>
у тебя в базе лежат plaintext пароли, а не их хеши поэтому password_verify выдает false --- Сообщение объединено с предыдущим 16 мар 2023 кода самой регистрации нет
Здесь есть проверка хешированного пароля if($row && password_verify($password, $row['password'])) Код if($row && password_verify($password, $row['password'])) Но для этого пароль должен быть захеширован в базе данных. Для этого перед сохранением его нужно вызвать функцию хеширования и сохранить в бд уже хеш. А в данном случае ты сравниваешь введенный пароль с предполагаемым хешем(который таковым не является)
<?php session_start(); require_once 'connect.php'; $login = $_POST['login']; $password = $_POST['password']; $error_fields = []; if ($login === '') { $error_fields[] = 'login'; } if ($password === '') { $error_fields[] = 'password'; } if (!empty($error_fields)) { $response = [ "status" => false, "type" => 1, "message" => "Error Fields", "fields" => $error_fields ]; echo json_encode($response); die(); } $check_user = mysqli_query($connect, "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'"); if (mysqli_num_rows($check_user) > 0) { $user = mysqli_fetch_assoc($check_user); $_SESSION['user'] = [ "id" => $user['id'], "login" => $user['login'], ]; $response = [ "status" => true, "message" => 'Data incorrect' ]; echo json_encode($response); } else { $response = [ "status" => false, "message" => 'Data incorrect' ]; echo json_encode($response); } ?> PHP <?php session_start(); require_once 'connect.php'; $login = $_POST['login']; $password = $_POST['password']; $error_fields = []; if ($login === '') { $error_fields[] = 'login'; } if ($password === '') { $error_fields[] = 'password'; } if (!empty($error_fields)) { $response = [ "status" => false, "type" => 1, "message" => "Error Fields", "fields" => $error_fields ]; echo json_encode($response); die(); } $check_user = mysqli_query($connect, "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'"); if (mysqli_num_rows($check_user) > 0) { $user = mysqli_fetch_assoc($check_user); $_SESSION['user'] = [ "id" => $user['id'], "login" => $user['login'], ]; $response = [ "status" => true, "message" => 'Data incorrect' ]; echo json_encode($response); } else { $response = [ "status" => false, "message" => 'Data incorrect' ]; echo json_encode($response); } ?>