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);
...
To check which configuration files are processed by the server, just execute
$ /path_to_mysqld/mysqld --help --verbose
At the beginning of output you will find information about configuration files, e.g.
Если рассматривать аналогию с php, то там каждый запрос отправляется с новым подключением к базе.Это не так. Соединение открывается на все время выполнения скрипта, и закрывается автоматически по завершении работы всей цепочки вызовов. В процессе, одно соединение может выполнить стопицот запросов.
На сколько целесообразно "пытаться" держать соединение, или все же просто по аналогии с php?Вот тут точного ответа не дам, однако в пхп стараются избегать персистент соединения, так как пул соединений не бесконечный, и чем быстрее закроется соединение, тем быстрее можно освободить очередь для открытия нового, таким образом с небольшой задержкой можно обслужить очередь из сильно превышающей пул очереди. А с одним соединением начинается жонглирование запросами внутри 1 соединения, что приводит к блокировке кучи пользователей пользующихся 1 соединением с бд, вместо локально тормозящего 1 юзера в случае открытия/закрытия...
размещать сайт на хостинге в открытый доступ;А есть че размещать то? Хоть один сайт с полутора функциями? Что-то базовое, типа авторизация-регистрация-блог?
создавать формы для ввода данных , которые будут записывать введенные данные в файл либо отправлять по указанному e-mailОк, первый вопрос отпал...
В каких технологиях мне нужно разобраться? Надо ли учить PHP и MySQL?Любой современный язык под веб подойдет. И базовый SQL синтаксис для начала. Если работы будете "чисто для себя" делать, этого достаточно. Если для заказчика - либо учить что-то из фреймворков, либо брать готовые цмс и настраивать, что тоже вполне работа.
Все работает в 99% нормально, но иногда проскакивает выдача другой строки, не с таким полем, по которому ищем.Это просто значит 99% проблема в коде. Логируйте в файл запрос, параметры и результат выполнения, скорее всего логика работает не так как вы задумали. Как только словите ошибку - смотрите свой лог, наверняка запрос будет отличаться от ожидаемого.
expects parameter 1 to be mysqli_result, bool givenожидаем результат запроса, но получаем булеан. Почему? 99% кривой запрос, но этого мы не узнаем, так как кода нету. Для нормального отображения ошибок запросов, нужно добавить после соединения
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Здесь уже проблема с хедеромДа нет, с хедером все ок. Проблема что тут его уже нельзя отправить, так как вы что-то вывели в браузер (скорее всего как раз ошибку из п.1). Что легко гуглится (Результатов: примерно 6 170 000).
селект *
фром тбл
вэа юзер_ид ин(
селект юзер_ид
фром тбл
вэа валуе_ид = 23
груп бай валуе_ид
хэвинг каунт(*) = 2
) т1
энд валуе_ид = 22
// Mysql connect
$opt = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
$conn = new PDO(
"mysql:host=".$settings['db']['host'].";dbname=".$settings['db']['name'].";port=".$settings['db']['port'].";",
$settings['db']['user'],
$settings['db']['password'],
$opt
);
...
После этого смотреть что вылазит в ошибках. function mysqli_json_insert($mysqli, $tablename, $json){
$arr = json_decode($json, true);
$fields = '`' . implode('`, `', array_keys($arr)) . '`' ;
$values = implode(',', array_fill(0, count($arr)));
$stmt = $mysqli->prepare("insert into `$tablename` ($fields) values ($values)");
$types = str_repeat('s', count($arr));
$stmt->bind_param($types, ...$arr);
$stmt->execute();
}
Писал с руки, так что могут быть очепятки...