Почему $array=$sql->fetch(PDO::FETCH_ASSOC). Возвращает false не зависимо от того что я написал в форму?

Ссылка скопирована
PHP
1 ответ
//Файл login.php   <!DOCTYPE html> <html lang="en"> <head> 	<meta charset="UTF-8"> 	<meta name="viewport" content="width=device-width, initial-scale=1.0"> 	<title>Вход в админку</title> </head> <body> 	<h2 style="text-align:center;padding-top:100px">Вход в административную панель</h2>  	<form action="admin/admin.php" method="post" style="text-align:center;padding-top:50px"> 	<div class="form-group"> 		<lable>Логин </lable> 	<input type="text" placeholder="Введите логин" name="login">     </div>      <div class="form-group">     	<lable>Пароль</lable> 	<input type="text" placeholder="Введите пароль" name="password">     </div>     <button type="submit" class="btn btn-primary">Войти</button> </form> 	 </body> </html>      Файл connect.php <?php $user = "root"; $password =""; $host = "localhost"; $db = "project"; $dbh = 'mysql:host='.$host.';dbname='.$db.';charset=utf8mb4'; $pdo=new PDO($dbh,$user,$password); ?>   //Файл admin.php <?php require_once '../functions/connect.php';?> <?php $login = $_POST['login']; $password = $_POST['password'];  $sql = $pdo->prepare("SELECT id FROM user WHERE login=:login AND password=:password"); $sql->execute(array('login' => $login, 'password' => $password)); $array=$sql->fetch(PDO::FETCH_ASSOC); var_dump($array); ?>

//Файл login.php <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Вход в админку</title> </head> <body> <h2 style="text-align:center;padding-top:100px">Вход в административную панель</h2> <form action="admin/admin.php" method="post" style="text-align:center;padding-top:50px"> <div class="form-group"> <lable>Логин </lable> <input type="text" placeholder="Введите логин" name="login"> </div> <div class="form-group"> <lable>Пароль</lable> <input type="text" placeholder="Введите пароль" name="password"> </div> <button type="submit" class="btn btn-primary">Войти</button> </form> </body> </html> Файл connect.php <?php $user = "root"; $password =""; $host = "localhost"; $db = "project"; $dbh = 'mysql:host='.$host.';dbname='.$db.';charset=utf8mb4'; $pdo=new PDO($dbh,$user,$password); ?> //Файл admin.php <?php require_once '../functions/connect.php';?> <?php $login = $_POST['login']; $password = $_POST['password']; $sql = $pdo->prepare("SELECT id FROM user WHERE login=:login AND password=:password"); $sql->execute(array('login' => $login, 'password' => $password)); $array=$sql->fetch(PDO::FETCH_ASSOC); var_dump($array); ?>

Дополнительно:

Ответы:

Если версия PHP ниже 8.0, то добавьте в вызов конструктора опцию PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION. Если версия 8.0 и выше или после добавления опции ошибок не показывает, то значит запрос ничего не находит в базе.

  • ошибок не показывает, то значит запрос ничего не находит в базе.

    Пустой результат запроса - это пустой массив, а не false

  • Сергей delphinpro, Пустой массив возвращает fetchAll. Обычный fetch возвращает false если больше нет строк в выборке.

    The return value of this function on success depends on the fetch type. In all cases, false is returned on failure or if there are no more rows.

  • Rsa97, точно..

У вас как процедура регистрации выгляит? Вы что, прямо вот так храните в базе данных пароль в открытом виде?
Или все-таки храните хэш от пароля, сгенерированный функцией password_hash?
Если храните хэш, то зачем вы пытаетесь найти в базе пароль в том виде, как он был введен в форму?

По поводу принципов регистрации/авторизации вот здесь ознакомьтесь
https://habr.com/ru/articles/665602/
Специально для новичков писал.

Когда я стираю : в запросе к базе данных то выводит id 1 вне зависимости от того что я написал в форму

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Проблема, с которой вы столкнулись, может возникать из-за нескольких возможных причин. Давайте разберемся, почему $array=$sql->fetch(PDO::FETCH_ASSOC) возвращает false независимо от введенных данных.

1. Ошибка в SQL запросе: Первым делом стоит проверить правильность написания SQL запроса. Убедитесь, что запрос синтаксически корректен и не содержит ошибок.

2. Отсутствие данных в результате запроса: Если SQL запрос выполнен успешно, но в результате запроса не было найдено ни одной строки, метод fetch() вернет false. Убедитесь, что в базе данных есть данные, соответствующие вашему запросу.

3. Неправильное использование метода fetch(): Возможно, вы неправильно используете метод fetch(). Убедитесь, что после выполнения запроса вы вызываете метод fetch() в цикле, чтобы получить все строки результата.

Пример правильного использования fetch():

while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
    // обработка данных
}

while ($row = $sql->fetch(PDO::FETCH_ASSOC)) { // обработка данных }

4. Необходимо проверить наличие данных перед вызовом fetch(): Для того чтобы избежать ошибок, связанных с отсутствием данных, рекомендуется проверить наличие данных перед вызовом fetch(). Например, вы можете использовать условие IF для проверки наличия данных перед вызовом fetch().

Пример проверки наличия данных:

if ($sql->rowCount() > 0) {
    $array = $sql->fetch(PDO::FETCH_ASSOC);
} else {
    echo "Нет данных для извлечения";
}

if ($sql->rowCount() > 0) { $array = $sql->fetch(PDO::FETCH_ASSOC); } else { echo "Нет данных для извлечения"; }

Проверьте вышеперечисленные возможные причины и убедитесь, что вы правильно используете метод fetch(). Если проблема не решена, попробуйте использовать отладочные инструменты, чтобы узнать, какие данные возвращаются из базы данных перед вызовом fetch().

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно