За последние 24 часа нас посетил 21781 программист и 1014 роботов. Сейчас ищут 653 программиста ...

Авторизация регистрация, не работает, в чём проблема?

Тема в разделе "PHP для новичков", создана пользователем Алексе(й), 13 сен 2020.

  1. Алексе(й)

    Алексе(й) Новичок

    С нами с:
    10 сен 2020
    Сообщения:
    1
    Симпатии:
    0
    Привет, делал регистрацию, вроде всё норм, начал делать делать авторизацию, у меня выдаёт ошибку, а точнее не сравнивает почту и пароли вроде бы ( я не уверен), так вот, сейчас прикреплю скрин базы, и дам коды, надеюсь поможете)
    Регистрация:
    PHP:
    1. <?php
    2.  
    3. require_once ("db.php");
    4.  
    5. if (isset($_POST['submit'])) {
    6. $err = [];
    7.     if (empty($_POST['name']) or empty($_POST['surname']) or empty($_POST['email']) or empty($_POST['password'])) {
    8.         $err[] = "Not all data entered!";
    9.     }
    10.     if (empty($_POST['name'])) {
    11.         $err[] = "Name not entered!";
    12.     }
    13.     if (empty($_POST['surname'])) {
    14.         $err[] = "Surname not entered!";
    15.     }
    16.     if (empty($_POST['email'])) {
    17.         $err[] = "Email not entered!";
    18.     }
    19.     if (empty($_POST['password'])) {
    20.         $err[] = "Password not entered!";
    21.     }
    22.         $name = $_POST['name'];
    23.         $surname = $_POST['surname'];
    24.         $email = $_POST['email'];
    25.  
    26.         $result = mysqli_query($db, "SELECT * FROM users WHERE email='$email'");
    27.    
    28.     if (mysqli_num_rows($result) > 0) {
    29.         $err[] = "The email is filled!";
    30.     }
    31.     if (!count($err)) {
    32.         setcookie('name', $name, time()+3600*1000);
    33.         setcookie('surname', $surname, time()+3600*1000);
    34.         setcookie('email', $email, time()+3600*1000);
    35.        
    36.         $password = $_POST['password'];
    37.         $password = mysqli_real_escape_string($db, $password);
    38.         $password = password_hash($password, PASSWORD_DEFAULT);
    39.  
    40.         setcookie('hach', $password, time()+3600*1000);
    41.  
    42.         $query = "INSERT INTO users (name, surname, email, password) VALUES ('$name', '$surname', '$email', '$password')";
    43.         $query = mysqli_query($db, $query);
    44.         header ("Location: login.php");
    45.         exit;
    46.     }
    47.    
    48.     if (count($err)) {
    49.         foreach($err AS $error) {
    50.         print ($error."<br>");
    51.         }
    52.     }
    53. }
    54.    
    55. ?>
    56.  
    57. <html>
    58.     <head>
    59.      
    60.     </head>
    61.     <body>
    62. <form method="post">
    63.     <h1>Registration</h1>
    64. <p>Your name:<input type="text" name="name"></p><br />
    65. <p>Your surname:<input type="text" name="surname"></p><br />
    66. <p>Your email:<input type="email" name="email"></p><br />
    67. <p>Your password:<input type="password" name="password"></p><br />
    68. <input type="submit" name="submit">
    69. </form>
    70.     </body>
    71. </html>
    Авторизация:
    PHP:
    1. <?php
    2. require_once ("db.php");
    3.  
    4. if (isset($_POST['submit'])) {
    5.   $err = [];
    6.   $login = 0;
    7.   $pass = $_POST['pass'];
    8.   $email = $_POST['email'];
    9.   $result = "SELECT * FROM 'users' WHERE
    10. 'email' = '$email'";
    11.   if (empty($_POST['email'])) {
    12.       $err[] = "Email not entered!";
    13.   }
    14.   if (!$result) {
    15.       $err[] = "Email not correct!";
    16.   }
    17.   $hash = $_COOKIE['hash'];
    18.   if ($hash != $pass) {
    19.       $err[] = "Password not correct!";
    20.   }
    21.   if (!count($err)) {
    22.       $login = 1;
    23.       header ("Location: profile.php");
    24.       exit;
    25.   }
    26.   if (count($err)) {
    27.     foreach($err AS $error) {
    28.       print ($error."<br>");
    29.     }
    30.   }
    31. }
    32.  
    33.  
    34.  
    35.  
    36. ?>
    37.  
    38. <html>
    39.     <head>
    40.        
    41.     </head>
    42.     <body>
    43. <form method="post">
    44. <h1>Authorization</h1>
    45. <p>Your email:<input type="email" name="email"></p><br />        
    46. <p>Your password:<input type="password" name="pass"></p><br />
    47. <input type="submit" name="submit">
    48. </form>
    49.     </body>
    50. </html>
     

    Вложения:

  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Не надо хеш в куки писать. Конечно, сейчас маловероятно, что кто-то разгадает по хешу пароль, но всё таки. https://www.php.net/manual/ru/function.password-verify.php - вот так пароли сравниваются.
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    по условию 7 строки, не будут работать строки 10,13,16,19

    26 строка - SQL-Injection в запросе

    31 строка - используй empty

    37 - mysqli_real_escape_string не будет работать, если после подключения не установлена кодировка соединения "правильно"

    32,33,34,40 - лишние, в куку заливают хеш сессии, для восстановления доступа авторизованного юзера.

    42 - SQL-Injection в запросе
    --- Добавлено ---
    не увидел неработоспособную часть