Привет, делал регистрацию, вроде всё норм, начал делать делать авторизацию, у меня выдаёт ошибку, а точнее не сравнивает почту и пароли вроде бы ( я не уверен), так вот, сейчас прикреплю скрин базы, и дам коды, надеюсь поможете) Регистрация: PHP: <?php require_once ("db.php"); if (isset($_POST['submit'])) { $err = []; if (empty($_POST['name']) or empty($_POST['surname']) or empty($_POST['email']) or empty($_POST['password'])) { $err[] = "Not all data entered!"; } if (empty($_POST['name'])) { $err[] = "Name not entered!"; } if (empty($_POST['surname'])) { $err[] = "Surname not entered!"; } if (empty($_POST['email'])) { $err[] = "Email not entered!"; } if (empty($_POST['password'])) { $err[] = "Password not entered!"; } $name = $_POST['name']; $surname = $_POST['surname']; $email = $_POST['email']; $result = mysqli_query($db, "SELECT * FROM users WHERE email='$email'"); if (mysqli_num_rows($result) > 0) { $err[] = "The email is filled!"; } if (!count($err)) { setcookie('name', $name, time()+3600*1000); setcookie('surname', $surname, time()+3600*1000); setcookie('email', $email, time()+3600*1000); $password = $_POST['password']; $password = mysqli_real_escape_string($db, $password); $password = password_hash($password, PASSWORD_DEFAULT); setcookie('hach', $password, time()+3600*1000); $query = "INSERT INTO users (name, surname, email, password) VALUES ('$name', '$surname', '$email', '$password')"; $query = mysqli_query($db, $query); header ("Location: login.php"); exit; } if (count($err)) { foreach($err AS $error) { print ($error."<br>"); } } } ?> <html> <head> </head> <body> <form method="post"> <h1>Registration</h1> <p>Your name:<input type="text" name="name"></p><br /> <p>Your surname:<input type="text" name="surname"></p><br /> <p>Your email:<input type="email" name="email"></p><br /> <p>Your password:<input type="password" name="password"></p><br /> <input type="submit" name="submit"> </form> </body> </html> Авторизация: PHP: <?php require_once ("db.php"); if (isset($_POST['submit'])) { $err = []; $login = 0; $pass = $_POST['pass']; $email = $_POST['email']; $result = "SELECT * FROM 'users' WHERE 'email' = '$email'"; if (empty($_POST['email'])) { $err[] = "Email not entered!"; } if (!$result) { $err[] = "Email not correct!"; } $hash = $_COOKIE['hash']; if ($hash != $pass) { $err[] = "Password not correct!"; } if (!count($err)) { $login = 1; header ("Location: profile.php"); exit; } if (count($err)) { foreach($err AS $error) { print ($error."<br>"); } } } ?> <html> <head> </head> <body> <form method="post"> <h1>Authorization</h1> <p>Your email:<input type="email" name="email"></p><br /> <p>Your password:<input type="password" name="pass"></p><br /> <input type="submit" name="submit"> </form> </body> </html>
Не надо хеш в куки писать. Конечно, сейчас маловероятно, что кто-то разгадает по хешу пароль, но всё таки. https://www.php.net/manual/ru/function.password-verify.php - вот так пароли сравниваются.
по условию 7 строки, не будут работать строки 10,13,16,19 26 строка - SQL-Injection в запросе 31 строка - используй empty 37 - mysqli_real_escape_string не будет работать, если после подключения не установлена кодировка соединения "правильно" 32,33,34,40 - лишние, в куку заливают хеш сессии, для восстановления доступа авторизованного юзера. 42 - SQL-Injection в запросе --- Добавлено --- не увидел неработоспособную часть