так, давайте по порядку:
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 ' никогда ничего не найдет из-за пробела в условии.