За последние 24 часа нас посетил 17181 программист и 1597 роботов. Сейчас ищут 1604 программиста ...

Не работает запрос в базуД.Авторизация.

Тема в разделе "PHP для новичков", создана пользователем LevCheb, 23 апр 2020.

Метки:
  1. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    Ребят подскажите пожалуйста.При правильной работе запроса в БД у меня должно появиться "1" потому что у меня есть авторизованный пользователь и он нашел логин и пароль.НО в данном примере у меня не работает запрос я не могу понять почему?При echo у меня выводит "0" значит запрос не правильный.Пожалуйста подскажите в чем проблема?А регистрация работает сохраняет все данный через форму!
    <?php
    session_start();
    require_once'connect.php';


    $login = $_POST['login'];
    $password = $_POST['password'];


    $check_user = mysqli_query($connect, "SELECT*FROM `users` WHERE `login` = '$login' AND `password` = '$password'");
    echo mysqli_num_rows($check_user);
    ?>
     
  2. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @LevCheb, обычно проблема с пробелами в знаниях, но ты пошёл еще дальше у тебя проблема с пробелами.
     
    romach и ADSoft нравится это.
  3. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    Будьте Добры объясните конкретно где?
     
  4. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    require_once'connect.php'; -> require_once 'connect.php'; или require_once('connect.php');

    $check_user = mysqli_query($connect, "SELECT*FROM `users` WHERE `login` = '$login' AND `password` = '$password'");
    надо хотя бы так
    $query = "SELECT * FROM `users` WHERE `login` = '" . $login . "' AND `password` = '" . $password . "'";
    $check_user = mysqli_query($connect, $query) or die ('ошибка в запросе' . mysqli_error($connect));
     
  5. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    я вписал все как посоветовали!добавил echo mysqli_num_rows($check_user); Всеровно он показывает мне "0' а должно быть"1"; Я хз=((((
    --- Добавлено ---
    Регистрация у меня работает все хорошо!Ввожу логин пароль майл все работает все сохраняет!
     
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Слово «работает» к коду с дырами можно применить только весьма условно :rolleyes:

    Отсматривайте/отлаживайте все по порядку, от самого connect.php. Вывод ошибок, надеюсь, включен.
     
  7. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    Я стараюсь сделать по видео уроку!НА уроке все блин работает одинакого в точ точ пишу но ни как(
     
  8. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Если вас на первых уроках не научили осн. принципам разработки, то либо вы просматриваете курс выборочно, либо он – отстой, либо он предполагает какую-то базовую подготовку.
     
  9. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    основные принципы я понимаю.Регистрация же работает все нормально с ней!Сохраняет зарегестрированных пользователей!!
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Еще раз: работает != нормально с ней ;) Но оставьте пока регистрацию, если уверены, что данные попали в БД и они корректны. Разберитесь с проблемой из этой темы.
    --- Добавлено ---
    Это вам в уроке показали так делать?
     
  11. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    OK=(
    ДА!
     
  12. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @LevCheb, покажи скрипт регистрации.
     
  13. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    <?php

    session_start();
    require_once 'connect.php';

    $full_name = $_POST['full_name'];
    $login = $_POST['login'];
    $email = $_POST['email'];
    $password = $_POST['password'];
    $password_confirm = $_POST['password_confirm'];

    if($password === $password_confirm){
    $query = "INSERT INTO users (full_name, login, email, password) VALUES ('$full_name', '$login', '$email', '$password')";
    $result = mysqli_query($connect, $query);

    $_SESSION['message'] = "Регистрация прошла успешно";
    header( 'Location: ./index.php' );

    }else{

    $_SESSION['message'] = "Пароли не совпадают";
    header( 'Location: register.php' );

    }


    ?>

    Вот!
     
  14. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.830
    Симпатии:
    651
    Вы хоть в БД заглядывали?

    Что мешало «годными» инструментами внести данные в БД? Я про аутентификацию, не регистрацию.
     
  15. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    Конечно заглядывал!Логин Пароль Майл и ФИО сохраняеться! В обзоре я вижу все данные!
    А авторизованный пользователь по идее должен быть видел в разделе Привилегии!
     
  16. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @LevCheb, надпись "Регистрация прошла успешно" говорит только о том, что совпали пароли, как там на самом деле обстоит дело с успехом регистрации из кода доподлинно не известно.
    Программирование - это прежде всего логика.
    Купите в книжном магазине нормальную книгу по РНР+MySQL и изучайте.
    Видимоуроки до добра не доведут.
     
  17. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.853
    Симпатии:
    748
    Адрес:
    Татарстан
    1. Хранить пароли в открытом виде в БД - ЗЛО
    2. Напрямую совать в запросах БД данные от пользователя -- БОЛЬШОЕ ЗЛО! здравствуй SQL иньекция...
    3. Учитесь пошаговой отладке....
    к примеру
    PHP:
    1. $sql = "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'";
    2. $check_user = mysqli_query($connect, $sql);
    3. echo $sql;
    4. echo mysqli_num_rows($check_user);
    посмотрите что у вас в запросе, порпобуйте его напрямую в phpmyadmin выполнить
    4. Отсутствие разметки на форуме - может и не большое зло, но сцуко жутко неприятно, причем встроенная подсветка синтаксиса- в 50% решает проблему новичков
     
  18. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    SELECT*FROM `users` WHERE `login` = '' AND `password` = ''0 вышел вот такой результат
     
  19. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @LevCheb, и о чём это говорит?
     
  20. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    То что не нашел не одну запись совпадающую по логину и паролю
     
  21. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    @LevCheb, как он найдёт если ты не передаёшь в запрос ни логин ни пароль?
    Я даже специально написал тебе пример запроса с конкатенацией.
    Перед тем как совать переменные в запрос их надо валидировать и экранировать если они пришли извне, и проверять пришли ли они вообще.
    Это
    просто вывод в браузер текстовой переменной $sql
    И какого хера там опять нет пробелов???
     
  22. LevCheb

    LevCheb Новичок

    С нами с:
    21 ноя 2019
    Сообщения:
    20
    Симпатии:
    0
    ну как не передает?
    $sql = "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'";
    вот передает разве нет?
     
  23. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Какие принципы? Ты не знаешь элементарных основ языка. От слова совсем.
     
  24. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.264
    Симпатии:
    405
    @LevCheb вот примерно так должно все быть, иди изучай каждую строчку
    PHP:
    1. <?php
    2. $args = [
    3.     'full_name' =>
    4.     [
    5.         'filter' => FILTER_VALIDATE_REGEXP,
    6.             'options' => [
    7.                 'regexp' => '/^\S{3,30}$/u'
    8.             ]
    9.     ],
    10.     'login' =>
    11.     [ '
    12.        filter' => FILTER_VALIDATE_REGEXP,
    13.         'options' => [
    14.             'regexp' => '/^\S{3,30}$/u'
    15.         ]
    16.     ],
    17.     'password' =>
    18.     [ '
    19.        filter' => FILTER_VALIDATE_REGEXP,
    20.         'options' => [
    21.             'regexp' => '/^\S{6,100}$/u'
    22.         ]
    23.     ],
    24.     'email' => FILTER_VALIDATE_EMAIL,
    25. ];
    26.  
    27. $mesg = [
    28.     'full_name' => [
    29.         'error' => 'Введите корректное имя',
    30.     ],
    31.     'login' => [
    32.         'error' => 'Введите корректный логин',
    33.     ],
    34.     'password' => [
    35.         'error' => 'Введите корректный пароль',
    36.     ],
    37.     'email' => [
    38.         'error' => 'Введите корректный email',
    39.     ],
    40. ];
    41. $error = array();
    42.  
    43. $post = filter_input_array(INPUT_POST, $args, $add_empty = true);
    44.  
    45. if ( isset( $post ) )
    46. {
    47.     foreach ($post as $key => $val)
    48.     {
    49.         if ( empty( $val ) )
    50.         {
    51.             $error[] = $mesg[$key]['error'];
    52.         }
    53.     }
    54. }
    55.  
    56. if ( !empty($post) && empty($error) )
    57. {
    58.     if( $stmt = $mysqli->prepare("SELECT * FROM 'users' WHERE 'login' = ?") )
    59.     {
    60.         $stmt->bind_param("s", $post['login']);
    61.         $stmt->execute();
    62.         $row = $stmt->rowCount();
    63.  
    64.         if( $row > 0 )
    65.         {
    66.             $error[] = "Пользователь с таким ником уже существует";
    67.         }
    68.     }
    69.     else
    70.     {
    71.         echo $mysqli->error;
    72.         die();
    73.     }
    74.  
    75.     if( $stmt = $mysqli->prepare("SELECT * FROM 'users' WHERE 'email' = ?") )
    76.     {
    77.         $stmt->bind_param("s", $post['email']);
    78.         $stmt->execute();
    79.         $row = $stmt->rowCount();
    80.  
    81.         if( $row > 0 )
    82.         {
    83.             $error[] = "Пользователь с таким email уже существует";
    84.         }
    85.     }
    86.     else
    87.     {
    88.         echo $mysqli->error;
    89.         die();
    90.     }
    91.  
    92.     if( empty($error) )
    93.     {
    94.         $password = password_hash($post['password'], PASSWORD_DEFAULT);
    95.  
    96.         if ($stmt = $mysqli->prepare("INSERT INTO 'users' ('full_name', 'login', 'email', 'password') VALUES (?,?,?,?)"))
    97.         {
    98.             $stmt->bind_param("ssss", $post['full_name'], $post['login'], $post['email'], $password );
    99.             $stmt->execute();
    100.      
    101.             echo "Добавлено";
    102.         }
    103.         else
    104.         {
    105.             echo $mysqli->error;
    106.         }
    107.     }
    108.  
    109. }
    110. else
    111. {
    112.     print_r($error);
    113.     die();
    114. }
     
  25. Valick

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

    С нами с:
    12 авг 2018
    Сообщения:
    1.911
    Симпатии:
    328
    Ещё раз это:
    тело твоего запроса к базе данных распечатанное в браузере при помощи оператора echo
    Ты спрашиваешь у базы данных:
    Найди мне запись у которой логин = пусто и пароль = пусто
    А база данных тебе говорит прямым текстом: Иди в книжный магазин и купи книгу и сиди читай, потому что ты полный 0