За последние 24 часа нас посетили 17568 программистов и 1722 робота. Сейчас ищут 1673 программиста ...

Система авторизации

Тема в разделе "PHP и базы данных", создана пользователем maksorr2, 2 янв 2023.

  1. maksorr2

    maksorr2 Новичок

    С нами с:
    2 янв 2023
    Сообщения:
    2
    Симпатии:
    0
    Всем приветики! Использую вот такой код для проверки есть ли вообще такой пользователь в бд

    <?php
    $login = filter_var(trim($_POST['login_name']),
    FILTER_SANITIZE_STRING);
    $pass = filter_var(trim($_POST['login_password']),
    FILTER_SANITIZE_STRING);


    $mysql = new mysqli('localhost', 'root', '', 'users-bd');
    $result = $mysql->query("SELECT*FROM `user` WHERE `login` = '$login' AND `pass` = '$pass'");
    if ($result->num_rows == 0) {
    echo "Такой пользователь не найден";
    exit;
    }
    print_r($user);
    exit();

    $mysql->close();

    header('Location: /');
    ?>

    Но при попытке написать ник, который есть в бд ошибка "Такой пользователь не найден" всё равно выскакивает. Я новичок, поэтому даже этого не знаю.
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    1. Вставляй в следующий раз код правильно. Кнопка </>.
    2. Отучайся хранить пароль в открытом виде в БД. Он должен лежать в виде необратимого хеша. https://php.net/password_hash.
    3. Не надо ничего санитайзить, надо использовать подготовленные выражения. https://php.net/mysqli_prepare.
    4. Способ отладки SQL-запросов - вывести, что в итоге получилось, на экран, потом посмотреть в phpmyadmin и аналогах, работает ли.
     
  3. maksorr2

    maksorr2 Новичок

    С нами с:
    2 янв 2023
    Сообщения:
    2
    Симпатии:
    0
    PHP:
    1. <?php
    2.     $login = filter_var(trim($_POST['login_name']),
    3.     FILTER_SANITIZE_STRING);
    4.     $email = filter_var(trim($_POST['email']),
    5.     FILTER_SANITIZE_STRING);
    6.     $pass = filter_var(trim($_POST['login_password']),
    7.     FILTER_SANITIZE_STRING);
    8.     $passr = filter_var(trim($_POST['password-repeat']),
    9.     FILTER_SANITIZE_STRING);
    10.  
    11.     $pass = md5($pass."S12");
    12.  
    13.     $mysqli = require __DIR__ . "\db.php";
    14.     $result = mysqli_query($mysqli, "SELECT * FROM `user` WHERE `login` = '$login' OR `mail` = '$email'");
    15.     if (mysqli_num_rows($result) > 0) {
    16.         echo
    17.         "<script> alert('Логин или почта уже были взяты'); </script>";
    18.     }
    19.     else{
    20.         if ($pass == $passr) {
    21.             $sql = "INSERT INTO `user` (`login`, `mail`, `password_hash`) VALUES ('$login', '$email', '$pass')";
    22.             $stml = $mysqli->stmt_init();
    23.             $stmt->prepare($sql);
    24.  
    25.             print_r($_POST);
    26.             var_dump($pass);
    27.         }
    28.     }
    29.  
    30. ?>
    А теперь выскакивает это:
    Warning: mysqli_query() expects parameter 1 to be mysqli, int given in C:\OSPanel\domains\site\register.php on line 14

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null given in C:\OSPanel\domains\site\register.php on line 15
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.794
    Симпатии:
    1.330
    Адрес:
    Лень
    тебе написали за тебя код с сюрпризом, а ты тупо скопировал. o_O
     
  5. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Это что-то новое появилось... И вангую, ты ничего не возвращаешь из этого файла, поэтому require возвращает единицу, если мне память не изменяет, о том, что успешно включился скрипт. Надо осознавать, что ты пишешь в коде

    В таком виде подготовка вообще бесполезна...

    Ссылки, которые я дал, явно не прочитал
     
  6. гендаль серый

    гендаль серый Новичок

    С нами с:
    20 янв 2023
    Сообщения:
    53
    Симпатии:
    0
    FILTER_SANITIZE_STRING
    на сайте php пишут что эту функцию уже нельзя использовать - устарела