Неустранимая ошибка: необученная ошибка: вызов функции-члена RowCount () в bool - PullRequest
0 голосов
/ 24 июня 2019

У меня проблема с моей страницей входа.Я получил эту ошибку: Неустранимая ошибка: Uncaught Ошибка: вызов функции-члена RowCount () на bool в C: \ xampp \ htdocs \ root \ login.php: 43 Трассировка стека: # 0 {main}, брошенный в C: \ xampp\ htdocs \ root \ login.php в строке 43

  <?php

                    if(isset($_POST['loginRequest'])){

                        $username = $_POST['email'];
                        $password = $_POST['password'];
                        $Sifreli = md5($password);

                        $query = $db->query("SELECT * FROM yonetim WHERE username = '{$username}'")->fetch(PDO::FETCH_ASSOC);
                        if($say = $query->RowCount()){
                        if ($say > 0){
                            $user = $query;
                            if($user['pass'] == $Sifreli){
                                $_SESSION['LOGGED'] = $user['username'];
                                if(isset($_SESSION['LOGGED'])){
                                    header('location:index.php');
                                }
                            } else {
                                echo "Kullanıcı adı veya şifre hatalı!";
                            }
                        } else {
                            echo 'Böyle bir kullanıcı bulunmamaktadır.';
                        }
                    }
                    }
                    ?>

1 Ответ

1 голос
/ 24 июня 2019

rowCount() - самый бесполезный метод во всех API баз данных. И ваш код является прекрасным примером этого.

У вас уже есть результаты вашей базы данных в $ query, это означает , вам больше ничего не нужно . Просто избавьтесь от строки rowCount и используйте $query прямо в условии:

$query = $db->query("SELECT * FROM yonetim WHERE ...")->fetch(PDO::FETCH_ASSOC);
if ($query){

Два обязательных примечания:

  1. Ни при каких обстоятельствах не следует помещать переменную данных непосредственно в запрос. Вместо этого используйте заполнитель и подготовленный запрос.
  2. Использование MD5 () не лучше, чем хранение в виде простого текста. Вместо этого вы должны использовать password_verify ().

Вот канонический пример, который я написал для кода , проверьте логин и пароль, используя PDO :

$stmt = $pdo->prepare("SELECT * FROM yonetim WHERE username = ?");
$stmt->execute([$username]);
$user = $stmt->fetch();

if ($user && password_verify($password, $user['password']))
{
    $_SESSION['LOGGED'] = $user['username'];
    header('location:index.php');
    exit;
} else {
    echo "Kullanıcı adı veya şifre hatalı!";
}

видите - на самом деле это намного проще, чем ваш текущий код!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...