Авторизация пользователя (Задание №3 по простой cms)
Primary tabs
Вопрос по этому заданию: http://fkn.ktu10.com/?q=node/9910
Возникла следующая проблемка. начал модернизировать код функции login() в файле admin.php.
Изначальный код имел такой вид:
function login() { $results = array(); $results['pageTitle'] = "Admin Login | Widget News"; if (isset($_POST['login'])) { // Пользователь получает форму входа: попытка авторизировать пользователя if ($_POST['username'] == ADMIN_USERNAME && $_POST['password'] == ADMIN_PASSWORD) { // Вход прошел успешно: создаем сессию и перенаправляем на страницу администратора $_SESSION['username'] = ADMIN_USERNAME; header( "Location: admin.php"); } else { // Ошибка входа: выводим сообщение об ошибке для пользователя $results['errorMessage'] = "Неправильный пароль, попробуйте ещё раз."; require( TEMPLATE_PATH . "/admin/loginForm.php" ); } } else { // Пользователь еще не получил форму: выводим форму require(TEMPLATE_PATH . "/admin/loginForm.php"); } }
Я модернизировал его следующим образом для сверки со списком зарегистрированных пользователей в базе данных (соответствующую табличку и тестовые значения в базе создал):
function login() { $results = array(); $results['pageTitle'] = "Admin Login | Widget News"; if (isset($_POST['login'])) { // Пользователь получает форму входа: попытка авторизировать пользователя if ($_POST['username'] == ADMIN_USERNAME && $_POST['password'] == ADMIN_PASSWORD) { // Вход прошел успешно: создаем сессию и перенаправляем на страницу администратора $_SESSION['username'] = ADMIN_USERNAME; header( "Location: admin.php"); } else { //Если пользователь не admin, выполняем соединение с базой данных и пытаемся найти в ней соответствующего пользователя $conn = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); $sql = "SELECT * FROM users WHERE name = :name AND pass = :pass"; $prep = $conn->prepare($sql); $prep->bindValue(":name", $_POST['username'], PDO::PARAM_STR); $prep->bindValue(":pass", $_POST['password'], PDO::PARAM_STR); if($prep->execute()){ $row = $prep->fetch(); $_SESSION['username'] = $row['name']; header( "Location: admin.php"); } $results['errorMessage'] = "Неправильный логин или пароль, попробуйте ещё раз."; require( TEMPLATE_PATH . "/admin/loginForm.php" ); } } else { // Пользователь еще не получил форму: выводим форму require(TEMPLATE_PATH . "/admin/loginForm.php"); } }
В целом код отрабатывает верно: если данные введены правильно, пользователь перенаправляется в админку, если нет - на ту же страницу регистрации. Проблема лишь в том, что в моем варианте почему-то не выводится сообщение о неверно введенном пароле...Помогите разобраться, будьте добры ) Заранее спасибо!
- Log in to post comments
- 9299 reads
vedro-compota
Tue, 06/19/2018 - 09:35
Permalink
уточним
какие по-вашему условия должны настать,
чтобы сообщение о неправильном пароле было выведено?
как вы понимаете этот код?
_____________
матфак вгу и остальная классика =)
Voronve
Tue, 06/19/2018 - 12:13
Permalink
Уточнение
Ну, ИМХО, если метод $prep->execute() возвращает значение false, это будет означать, что данные не извлеклись и пользователь с таким именем не существует, либо пароль неверный. Блок if выполняться не будет, значит не будет и перенаправления на admin.php. Код продолжит выполняться и сообщение должно быть выведено (но не выводится). В чём я ошибся?
vedro-compota
Tue, 06/19/2018 - 12:25
Permalink
это не так
смелое предположение) С чего бы вдруг это было так. Открываем и читаем, как видит чтобы получить false, надо получить какую-то проблему в извлечении данных, а пустой результат, едва ли является проблемой.
Чтобы понять что это так, даже не имея документации, вам достаточно было провести отладку этой части кода, что-то вроде:
-- ввести несуществующие логин и пароль и посмотреть что там с результатом)
Если вопрос всё ещё не ясен -- спрашивайте)
_____________
матфак вгу и остальная классика =)
Voronve
Tue, 06/19/2018 - 12:38
Permalink
Спасибо. Теперь мне стало
Спасибо. Теперь мне стало ясно, какой я идиот )
vedro-compota
Tue, 06/19/2018 - 12:51
Permalink
вопрос в целом нормален,
вопрос в целом нормален, правильно что задали.
Вывод такой: смотрите что именно возвращает функция. Если документация не ясна, тогда уже проводите ручную отладку.
_____________
матфак вгу и остальная классика =)
Voronve
Tue, 06/19/2018 - 12:54
Permalink
Так я как раз и смотрел..
Так я как раз и смотрел...Просто не понял поначалу, что нулевой результат не является ошибкой
vedro-compota
Tue, 06/19/2018 - 09:36
Permalink
Желательно также добавить из
Желательно также добавить из вопроса ссылку на задачу (или список, что есть).
_____________
матфак вгу и остальная классика =)
Voronve
Tue, 06/19/2018 - 12:16
Permalink
Добавил
Добавил