GirlInc
@GirlInc

Не могу авторизоваться, почему?

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

$pass = md5($pass."ghjsfkld2345");

    $mysql = new mysqli('localhost','root','root','automoykaBase'); 

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

    setcookie('user', $user['name'], time() + 3600, '/');

    $mysql->close();

    header('Location: Личный-кабинет.html');
?>
  • Вопрос задан
  • 132 просмотра
Решения вопроса 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
так, давайте по порядку:
login = filter_var(trim($_POST['login']), FILTER_SANITIZE_STRING);
$pass = filter_var(trim($_POST['pass']), FILTER_SANITIZE_STRING);
Во первых - зачем? Вы здесь не вносите никаких данных в систему, вы просто проверяете данные от пользователя с данными в бд.
Во вторых - если у вас есть правила для логина и пароля - надо их и применять, а не втыкать абсолютно бесполезные фильтры.

$pass = md5($pass."ghjsfkld2345");используйте встроенные функции, password_hash и password_verify для работы с паролями.

$result = $mysql->query("SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass '");
Читаем про подготовленные выражения. Без них рано или поздно словите инъекцию. И начинать надо сейчас, на этапе обучения, и привыкнуть что по другому с переменными в запросах не работают. Так же, по уму подключение желательно вынести отдельно и добавить настройки. Рекомендую использовать PDO драйвер подключения к бд, он работает чуть быстрее и по функционалу побогаче.

Warning: count(): Parameter must be an array or an object that implements Countable in D:\OSPanel\domains\Site1\auth.php on line 14
по тому что читаем доку -
fetch_assoc — Fetch the next row of a result set as an associative array
Соответственно, если запрос пустой, то фетчить нечего. Для проверки существует num_rows.

Выводит: "Такой пользователь не найден." Но в БД такой пользователь есть зарегестрированный, все данные авторизации правильные, а он выводит, что нету такого пользователя.
Программу не на*бешь. Если говорит что нету, значит нету. А если не находит то что есть, значит вы не правильно ищете, что легко проверить. Вангую что запрос будет совершенно не таким как вы ожидаете:
...
$query = "SELECT * FROM `users` WHERE `login` = '$login' AND `pass` = '$pass'";
var_dump('check: ',$login, $pass,$query); 
$result = $mysql->query($query);
...


UPD: абсолютно верно подмечено Adamos - `pass` = '$pass ' никогда ничего не найдет из-за пробела в условии.
Ответ написан
Комментировать
@aryzhanki
$login = filter_var(trim($_POST['login']),
FILTER_SANITIZE_STRING);


$login = filter_input(INPUT_POST, 'login');

$pass = md5($pass."ghjsfkld2345");


ИЗУЧИТЬ

а так-то видимо условие не выполнилось или редирект туда, где кука не действует или нет проверки на её наличие там
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
28 мар. 2024, в 18:16
1000 руб./за проект
28 мар. 2024, в 18:15
90000 руб./за проект
28 мар. 2024, в 18:05
5000 руб./за проект