За последние 24 часа нас посетил 16731 программист и 1718 роботов. Сейчас ищут 1825 программистов ...

При введении логина и пароля не происходит ничего хотя при регистрации данные заносятся в БД

Тема в разделе "PHP для новичков", создана пользователем ApiKri, 11 янв 2025.

Метки:
  1. ApiKri

    ApiKri Новичок

    С нами с:
    11 янв 2025
    Сообщения:
    1
    Симпатии:
    0
    Добрый вечер дорогие читатели!
    Случилась такая проблема что при регистрации данные вводятся в БД, но на сам аккаунт не заходит. Также при входе не заходит на аккаунт. Помогите пожалуйста разобраться в чём дело.
    Регистрация:
    Код (Text):
    1. <?php
    2.     include 'connect.php';
    3.     if (isset($_POST['login']) and isset($_POST['password']) and isset($_POST['password_confirm'])) {
    4.         $login = $_POST['login'];
    5.         $password = $_POST['password'];
    6.         $password_confirm = $_POST['password_confirm'];
    7.  
    8.         if ($password == $password_confirm) {
    9.             $query = "SELECT * FROM users WHERE login='$login'";
    10.             $result = mysqli_query($link, $query) or die(mysqli_error($link));
    11.             $user = mysqli_fetch_assoc($result);
    12.            
    13.         function validate_form($login, $password) {
    14.     $valid = true;
    15.     if (empty($login) or empty($password)) {
    16.       $valid = false;
    17.       $_SESSION['validate'] = 'Пароль и логин не должны быть пустыми';
    18.     }
    19.  
    20.     if (strlen($login) < 2 || strlen($login) > 10) {
    21.       $valid = false;
    22.       $_SESSION['validate'] = 'Логин должен содержать не менее 2 и не более 10 символов';
    23.     }
    24.  
    25.     if (strlen($password) < 6 || strlen($password) > 12) {
    26.       $valid = false;
    27.       $_SESSION['validate'] = 'Пароль должен содержать не менее 6 и не более 12 символов';
    28.     }
    29.  
    30.     return $valid;
    31.   }
    32.             if (empty($user)) {
    33.                 $_SESSION['auth'] = true;
    34.                 $_SESSION['permissions'] = 'user';
    35.                 $_SESSION['user'] = $login;
    36.                 $query = "INSERT INTO users SET login='$login', password='$password', permissions='user'";
    37.                 mysqli_query($link, $query);
    38.                 header("Location: index.php");
    39.             } else {
    40.                 $_SESSION['error'] = 'Пользователь с таким логином уже есть';
    41.             }
    42.         } else {
    43.             $_SESSION['error'] = 'Пароль не подтвержен';
    44.         }
    45.     }
    46. ?>
    47. <!DOCTYPE html>
    48. <html lang="en">
    49.  
    50. <head>
    51.     <meta charset="UTF-8">
    52.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    53.     <link rel="icon" type="image/svg" href="img/logogreen.svg">
    54.     <link rel="stylesheet" type="text/css" href="assets/css/style.css">
    55.     <link rel="stylesheet" type="text/css" href="css/header.css">
    56.     <link rel="preconnect" href="https://fonts.googleapis.com">
    57.     <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    58.     <link href="https://fonts.googleapis.com/css2?family=Parkinsans:wght@300..800&display=swap" rel="stylesheet">
    59.     <title>Document</title>
    60. </head>
    61. <header class="header">
    62.         <div class="container">
    63.             <div class="header_inner">
    64.  
    65.                 <?php
    66.                 include 'header.php'
    67.                     ?>
    68.  
    69.             </div>
    70.         </div>
    71.     </header>
    72.  
    73. <body class="signup__background">
    74.     <section class="container signup__center ">
    75.         <div class="">
    76.             <div class="item__header">
    77.                 <div class="signup__background__left">
    78.                     <div class="item signup__card">
    79.                         <h1 class="signup__title">Sign up</h1>
    80.                     </div>
    81.                 </div>
    82.                 <div class="item signup__background__right">
    83.                     <form action="signup.php" method="post" class="">
    84.                         <div class="signup__form">
    85.                             <div>
    86.                                 <label for="email" class="signup__text">Почта</label>
    87.                                 <input class="signup__line" type="email" placeholder="Введите вашу почту" name="login" required>
    88.                             </div>
    89.                             <div>
    90.                                 <label for="phone" class="signup__text">Номер телефона</label>
    91.                                 <input class="signup__line" type="tel" placeholder="Введите ваш номер телефона"
    92.                                     name="phone" required>
    93.                             </div>
    94.                             <div>
    95.                                 <label for="password" class="signup__text">Пароль</label>
    96.                                 <input class="signup__line" type="password" placeholder="Введите пароль" name="password" required>
    97.                             </div>
    98.                             <div>
    99.                                 <label for="password__repiat" class="signup__text">Повторите пароль</label>
    100.                                 <input class="signup__line" type="password" placeholder="Повоторите пароль"
    101.                                     name="password_confirm" required>
    102.                             </div>
    103.  
    104.                             <div class="signup__button__center">
    105.                                 <input type="submit" class="signup__button " value="Зарегестрироваться">
    106.                             </div>
    107.                             <p class="signup__link">Уже зарегестрированы?<a href="login.php" class="yellow">Вход</a>
    108.                             </p>
    109.  
    110.                         </div>
    111.                     </form>
    112.                 </div>
    113.             </div>
    114.         </div>
    115.     </section>
    116.  
    117. </body>
    118.  
    119. </html>
    Вход:
    Код (Text):
    1. <?php
    2. include 'connect.php';
    3.  
    4. if (isset($_POST['login']) and isset($_POST['password']) ) {
    5.     $login = $_POST['login'];
    6.  
    7.  
    8.     $query = "SELECT * FROM users WHERE login='$login'";
    9.     $result = mysqli_query($link, $query) or die(mysqli_error($link));
    10.     $user = mysqli_fetch_assoc($result);
    11.  
    12.    if(!empty($user)) {
    13.  
    14.             if($user['password'] == $_POST['password']) {
    15.                 $_SESSION['auth']= true;
    16.                 $_SESSION['permissions'] = $user['permissions'];
    17.                 header('Location: index.php');
    18.             } else {
    19.                 echo 'Неверная почта или пароль';
    20.             }
    21.     }
    22. }
    23.  
    24. ?>
    25. <!DOCTYPE html>
    26. <html lang="ru">
    27.  
    28. <head>
    29.     <meta charset="UTF-8">
    30.     <meta name="viewport" content="width=device-width, initial-scale=1.0">
    31.     <link rel="icon" type="image/svg" href="img/logogreen.svg">
    32.     <link rel="stylesheet" type="text/css" href="assets/css/style.css">
    33.     <link rel="stylesheet" type="text/css" href="css/header.css">
    34.     <link rel="preconnect" href="https://fonts.googleapis.com">
    35.     <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    36.     <link href="https://fonts.googleapis.com/css2?family=Parkinsans:wght@300..800&display=swap" rel="stylesheet">
    37.     <title>Document</title>
    38. </head>
    39. <header class="header">
    40.     <div class="container">
    41.         <div class="header_inner">
    42.  
    43.             <?php
    44.             include 'header.php'
    45.                 ?>
    46.  
    47.         </div>
    48.     </div>
    49. </header>
    50.  
    51. <body class="signup__background">
    52.     <section class="container signup__center ">
    53.         <div class="">
    54.             <div class="item__header">
    55.                 <div class="signup__background__left">
    56.                     <div class="item signup__card">
    57.                         <h1 class="signup__title">Log in</h1>
    58.                     </div>
    59.                 </div>
    60.                 <div class="item signup__background__right">
    61.                     <form action="" class="">
    62.                         <div class="login__form">
    63.                             <div>
    64.                                 <label for="email" class="signup__text">Почта</label>
    65.                                 <input class="signup__line" type="email" placeholder="Введите вашу почту" name="login"
    66.                                     required>
    67.                             </div>
    68.                             <div>
    69.                                 <label for="password" class="signup__text">Пароль</label>
    70.                                 <input class="signup__line" type="password" placeholder="Введите пароль" name="password"
    71.                                     required>
    72.                             </div>
    73.                             <div class="signup__button__center">
    74.                                 <input type="submit" class="login__button " value="Войти">
    75.                             </div>
    76.                             <p class="signup__link">Ещё не зарегестрированы?<a href="signup.php"
    77.                                     class="yellow">Регистрация</a>
    78.                             </p>
    79.  
    80.                         </div>
    81.                     </form>
    82.                 </div>
    83.             </div>
    84.         </div>
    85.     </section>
    86.  
    87. </body>
    88.  
    89. </html>
     
  2. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    А что по твоему должно происходить?
    --- Добавлено ---
    В любом случае, если ты используешь переменную $_SESSION, то в начале скрипта должен быть вызов session_start()

    Допустим, ты это не показал, но session_start() есть ))) В случае верного логина и пароля (аутентификация) должен происходить переход на страницу index.php где вероятно есть проверка значения из $_SESSION ( авторизация) — ты этого тоже не показал. Поэтому хз чего ты ожидаешь и что происходит.
     
  3. valentinnew

    valentinnew Активный пользователь

    С нами с:
    30 янв 2011
    Сообщения:
    161
    Симпатии:
    36
    у второй формы метод post надо указать
     
    artoodetoo нравится это.
  4. Vladimir Kheifets

    Vladimir Kheifets Новичок

    С нами с:
    23 сен 2023
    Сообщения:
    450
    Симпатии:
    87
    Адрес:
    Бавария, Германия
    Добрый день!

    1. Вам правильно подсказал valentinnew. Вы потеряля в тэге form атрибут method.
    В Вашем случае method по умолчанию get, а в PHP обрабатываете переменные $_POST.

    2. По регистрации Советую Вам:
    2.1 Делать её в два шага - в начале вводить мэйл и отправлять на него код подтверждения,
    а затем вводить этот код и сравнивать его с отправленным, и только в случае совпадения завершать регистрацию.

    2.2. Пароль лучше не сохранять в БД в явном виде.
    Вы можете использовать для сохранения пароля функцию
    PHP:
    1. password_hash($_POST["$_POST['password']"], PASSWORD_DEFAULT);
    a для проверки введённого пароля функцию
    PHP:
    1. password_verify($_POST['password'], $password)
    3. Про SQL инъекции.
    https://www.ptsecurity.com/upload/corporate/ru-ru/analytics/PT-devteev-Advanced-SQL-Injection.pdf
    Например, в Вашем коде:
    PHP:
    1. $query = "SELECT * FROM users WHERE login='$login'";
    Попробуйте сделать так:
    PHP:
    1. <?php
    2. include 'connect.php';
    3. if(filter_input(INPUT_POST, 'login'))
    4. {
    5.     $query = "SELECT id, permissions, password FROM `users` WHERE login = ?";
    6.     $stmt = $conn->prepare($query);
    7.     $stmt->execute([$_POST['login']]);
    8.     $stmt->bind_result($id, $permissions, $password);
    9.     $stmt->fetch();
    10.     if ($password)
    11.     {
    12.         if (password_verify($_POST['password'], $password))
    13.         {
    14.             session_start();
    15.             $_SESSION['user_id'] = $id;
    16.             $_SESSION['permissions'] = $permissions;
    17.             header('Location: index.php');
    18.         }
    19.         else
    20.         {
    21.            $message="Incorrect password";
    22.         }
    23.     }
    24.     else
    25.     {
    26.        $message="Not found user";
    27.     }
    28.     echo $message;
    29.     exit;
    30. }
    Удачи!
     
    Survivor и artoodetoo нравится это.
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.798
    Симпатии:
    1.331
    Адрес:
    Лень
  6. Дюран

    Дюран Активный пользователь

    С нами с:
    9 мар 2018
    Сообщения:
    291
    Симпатии:
    21
    надо mb_strlen