Ребят подскажите пожалуйста.При правильной работе запроса в БД у меня должно появиться "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); ?>
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));
я вписал все как посоветовали!добавил echo mysqli_num_rows($check_user); Всеровно он показывает мне "0' а должно быть"1"; Я хз=(((( --- Добавлено --- Регистрация у меня работает все хорошо!Ввожу логин пароль майл все работает все сохраняет!
Слово «работает» к коду с дырами можно применить только весьма условно Отсматривайте/отлаживайте все по порядку, от самого connect.php. Вывод ошибок, надеюсь, включен.
Если вас на первых уроках не научили осн. принципам разработки, то либо вы просматриваете курс выборочно, либо он – отстой, либо он предполагает какую-то базовую подготовку.
основные принципы я понимаю.Регистрация же работает все нормально с ней!Сохраняет зарегестрированных пользователей!!
Еще раз: работает != нормально с ней Но оставьте пока регистрацию, если уверены, что данные попали в БД и они корректны. Разберитесь с проблемой из этой темы. --- Добавлено --- Это вам в уроке показали так делать?
<?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' ); } ?> Вот!
Вы хоть в БД заглядывали? Что мешало «годными» инструментами внести данные в БД? Я про аутентификацию, не регистрацию.
Конечно заглядывал!Логин Пароль Майл и ФИО сохраняеться! В обзоре я вижу все данные! А авторизованный пользователь по идее должен быть видел в разделе Привилегии!
@LevCheb, надпись "Регистрация прошла успешно" говорит только о том, что совпали пароли, как там на самом деле обстоит дело с успехом регистрации из кода доподлинно не известно. Программирование - это прежде всего логика. Купите в книжном магазине нормальную книгу по РНР+MySQL и изучайте. Видимоуроки до добра не доведут.
1. Хранить пароли в открытом виде в БД - ЗЛО 2. Напрямую совать в запросах БД данные от пользователя -- БОЛЬШОЕ ЗЛО! здравствуй SQL иньекция... 3. Учитесь пошаговой отладке.... к примеру PHP: $sql = "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'"; $check_user = mysqli_query($connect, $sql); echo $sql; echo mysqli_num_rows($check_user); посмотрите что у вас в запросе, порпобуйте его напрямую в phpmyadmin выполнить 4. Отсутствие разметки на форуме - может и не большое зло, но сцуко жутко неприятно, причем встроенная подсветка синтаксиса- в 50% решает проблему новичков
@LevCheb, как он найдёт если ты не передаёшь в запрос ни логин ни пароль? Я даже специально написал тебе пример запроса с конкатенацией. Перед тем как совать переменные в запрос их надо валидировать и экранировать если они пришли извне, и проверять пришли ли они вообще. Это просто вывод в браузер текстовой переменной $sql И какого хера там опять нет пробелов???
ну как не передает? $sql = "SELECT * FROM `users` WHERE `login` = '$login' AND `password` = '$password'"; вот передает разве нет?
@LevCheb вот примерно так должно все быть, иди изучай каждую строчку PHP: <?php $args = [ 'full_name' => [ 'filter' => FILTER_VALIDATE_REGEXP, 'options' => [ 'regexp' => '/^\S{3,30}$/u' ] ], 'login' => [ ' filter' => FILTER_VALIDATE_REGEXP, 'options' => [ 'regexp' => '/^\S{3,30}$/u' ] ], 'password' => [ ' filter' => FILTER_VALIDATE_REGEXP, 'options' => [ 'regexp' => '/^\S{6,100}$/u' ] ], 'email' => FILTER_VALIDATE_EMAIL, ]; $mesg = [ 'full_name' => [ 'error' => 'Введите корректное имя', ], 'login' => [ 'error' => 'Введите корректный логин', ], 'password' => [ 'error' => 'Введите корректный пароль', ], 'email' => [ 'error' => 'Введите корректный email', ], ]; $error = array(); $post = filter_input_array(INPUT_POST, $args, $add_empty = true); if ( isset( $post ) ) { foreach ($post as $key => $val) { if ( empty( $val ) ) { $error[] = $mesg[$key]['error']; } } } if ( !empty($post) && empty($error) ) { if( $stmt = $mysqli->prepare("SELECT * FROM 'users' WHERE 'login' = ?") ) { $stmt->bind_param("s", $post['login']); $stmt->execute(); $row = $stmt->rowCount(); if( $row > 0 ) { $error[] = "Пользователь с таким ником уже существует"; } } else { echo $mysqli->error; die(); } if( $stmt = $mysqli->prepare("SELECT * FROM 'users' WHERE 'email' = ?") ) { $stmt->bind_param("s", $post['email']); $stmt->execute(); $row = $stmt->rowCount(); if( $row > 0 ) { $error[] = "Пользователь с таким email уже существует"; } } else { echo $mysqli->error; die(); } if( empty($error) ) { $password = password_hash($post['password'], PASSWORD_DEFAULT); if ($stmt = $mysqli->prepare("INSERT INTO 'users' ('full_name', 'login', 'email', 'password') VALUES (?,?,?,?)")) { $stmt->bind_param("ssss", $post['full_name'], $post['login'], $post['email'], $password ); $stmt->execute(); echo "Добавлено"; } else { echo $mysqli->error; } } } else { print_r($error); die(); }
Ещё раз это: тело твоего запроса к базе данных распечатанное в браузере при помощи оператора echo Ты спрашиваешь у базы данных: Найди мне запись у которой логин = пусто и пароль = пусто А база данных тебе говорит прямым текстом: Иди в книжный магазин и купи книгу и сиди читай, потому что ты полный 0