За последние 24 часа нас посетили 22370 программистов и 1146 роботов. Сейчас ищут 677 программистов ...

Запрос работает неправильно

Тема в разделе "PHP для новичков", создана пользователем Suyunoff, 29 июл 2019.

Метки:
  1. Suyunoff

    Suyunoff Новичок

    С нами с:
    16 июл 2019
    Сообщения:
    38
    Симпатии:
    1
    Привет, есть код регистрации который отправляет запрос к двум таблицам, по скриншотам попробую обьяснить:
    Код (Text):
    1. <?php
    2. session_start();
    3. include "db.php";
    4. if (!empty($_SESSION['logged_user']->id)) header('location: check.php');
    5. if (isset($_POST['login'])) {
    6.   if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['password'])) {
    7.       $name     = $_POST['name'];
    8.       $email    = $_POST['email'];
    9.       $password = $_POST['password'];
    10.       $ref = $_SESSION['ref_id'];
    11.          
    12.        if(mysqli_num_rows(mysqli_query($con, "SELECT id FROM users WHERE name = '$name'"))!= 0) $error = "Пользователь с таким ником уже существует";
    13.       else if(mysqli_num_rows(mysqli_query($con, "SELECT id FROM users WHERE email = '$email'"))!= 0) $error = "Пользователь с таким email уже существует";
    14.       else {
    15.         mysqli_query($con, "INSERT INTO `users` (name,email,password) VALUES('$name', '$email', '$password')");
    16.      
    17.         $as = mysqli_query($con, "SELECT id FROM users WHERE email = '$email'");
    18.         $a = mysqli_fetch_assoc($as);
    19.         $i = $a['id'];
    20.         $_SESSION['logged_user']->id = $i;
    21.         $user = mysqli_query($con, "SELECT `id` FROM `users` WHERE `email` = '$email'");
    22.         $a = mysqli_fetch_assoc($user);
    23.         $us=$a['id'];
    24.         $query = mysqli_query($con, "INSERT INTO `referals` (id, id_user, id_usser)
    25.         VALUES('','$us', '$ref')");
    26.  
    27.  
    28. }
    29.  
    30. }else $error = "Заполните все поля";
    31. }
    32. echo $error;
    33. ?>
    Регистрирую нового пользователя:
    upload_2019-7-29_22-14-3.png
    но страница просто обновляется
    upload_2019-7-29_22-14-45.png
    Но в бд данные сохраняются
    upload_2019-7-29_22-15-45.png

    Но если снова в регистрацию ввожу те же данные начинает работать и перекидывает на др страницу, НО БД НЕ МЕНЯЕТСЯ , ТО ЕСТЬ 2 РАЗ НЕ СОХРАНЯЕТСЯ ДАННЫЕ
    upload_2019-7-29_22-17-27.png
    --- Добавлено ---
    То есть мне надо 2 раза вводить данные в регистрацию
     

    Вложения:

  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.751
    Симпатии:
    1.322
    Адрес:
    Лень
    4 строка что делает?
     
  3. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    Если тебе нужно при вводе таких же данных изменить информацию тебе нужно делать UPDATE записи, но это не рекомендовано при регистрации.
    А проверку я твою увидел что ты сверяешь данные пользователя с тем что есть в бд.
    Я так полагаю что тут идет проверка на несуществование ID пользователя в сессии если его нет значит он не вошел на сайт.
     
    #3 _ne_scaju_, 29 июл 2019
    Последнее редактирование: 29 июл 2019
  4. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    PHP:
    1. include "db.php";
    2. if (!isset($_SESSION['logged_user']->id)) header('location: check.php');
    3.  
    4. if ($_SERVER['REQUEST_METHOD'] == 'POST')
    5. {
    6.    # фильтруем данные
    7.    $args = [
    8.         'name'  => [
    9.             'filter'  => FILTER_VALIDATE_REGEXP,
    10.             'options' => [
    11.                 'regexp' => '/^\S{3,20}$/u'
    12.             ]
    13.         ],
    14.         'email'   => FILTER_VALIDATE_EMAIL,
    15.         'password' => FILTER_DEFAULT
    16.     ];
    17.  
    18.     $filter = filter_input_array(INPUT_POST, $args);
    19.  
    20.     $err = [];
    21.  
    22.     # Проверяем данные, правда проверка какая то у тебя смутная.
    23.     if(mysqli_num_rows(mysqli_query($con, "SELECT `id` FROM `users` WHERE `name` = '$filter['name']'"))!= 0)
    24.     {
    25.         $err[] = "Пользователь с таким ником уже существует";
    26.     }
    27.     else if(mysqli_num_rows(mysqli_query($con, "SELECT `id` FROM `users` WHERE `email` = '$filter['email']'"))!= 0)
    28.     {
    29.         $err[] = "Пользователь с таким email уже существует";
    30.     }
    31.     if ( count( $err ) > 0 )
    32.     {
    33.         echo implode (',', $err);
    34.     }
    35.     else
    36.     {
    37.         mysqli_query($con, "INSERT INTO `users` (`name`,`email`,`password`) VALUES('$filter['name']', '$filter['email']', '$filter['password']')");
    38.  
    39.         $as = mysqli_query($con, "SELECT `id` FROM `users` WHERE `email` = '$filter['email']'");
    40.         $a = mysqli_fetch_assoc($as);
    41.         $i = $a['id'];
    42.         $_SESSION['logged_user']->id = $i;
    43.  
    44.         $user = mysqli_query($con, "SELECT `id` FROM `users` WHERE `email` = '$filter['email']'");
    45.         $a = mysqli_fetch_assoc($user);
    46.         $us=$a['id'];
    47.  
    48.         $ref = $_SESSION['ref_id'];
    49.  
    50.         $query = mysqli_query($con, "INSERT INTO `referals` (`id`, `id_user`, `id_usser`)
    51.            VALUES('','$us', '$ref')");
    52.      
    53.         # точняк забыл редирект, редиректим пользователя на нужную страницу.
    54.        header ('location: index.php');
    55.        exit();
    56.     }
    57. }
     
    #4 _ne_scaju_, 29 июл 2019
    Последнее редактирование: 29 июл 2019
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.792
    Симпатии:
    650
    Алгоритм в принципе не очень. Профи используют уник. поля, безусловную вставку и проверяют ее результат. В ответ на POST делают редирект, а не полноценное echo пользователю.
     
  6. Suyunoff

    Suyunoff Новичок

    С нами с:
    16 июл 2019
    Сообщения:
    38
    Симпатии:
    1
    можно этот код копировать и вставить? сейчас код не со мной, но выдавал ошибку на 8 строку
     
  7. _ne_scaju_

    _ne_scaju_ Старожил

    С нами с:
    25 ноя 2016
    Сообщения:
    2.149
    Симпатии:
    118
    попробуй.