Я получаю досадную ошибку в моей системе входа

Я пытаюсь создать систему входа в систему для моего сайта, но при каждом запуске появляется сообщение об ошибке:

Предупреждение: mysql_num_rows() ожидает, что параметр 1 будет ресурсом, логическое значение указано в C:\xampp\htdocs\login_system\includes\login.php в строке 46.

Я искал в интернете решение и попробовал несколько вещей, но, похоже, это не сработало, поэтому, пожалуйста, помогите мне, если кто-то сможет это выяснить

Вот мой код:

<?php
error_reporting (E_ALL ^ E_NOTICE);
session_start();
?>
<!doctype html>

<html>
<head>
    <meta charset="utf-8">
    <title>Untitled Document</title>
</head>


<body>
    <?php

        $form = "<form action='login.php' method='post'>
            <table>
                <tr>
                    <td>Brugernavn:</td>
                    <td><input type='text' name='bruger' /></td>
                </tr>
                <tr>
                    <td>Password:</td>
                    <td><input type='password' name='password' /></td>
                </tr>
                <tr>
                    <td><input type='submit' name='logind_btn' value='Log ind' /></td>
                </tr>
            </table>
        </form>";


        if($_POST['logind_btn']){
                $bruger = $_POST['bruger'];
                $password = $_POST['password'];

                if($bruger){
                    if($password){
                        require("tilslut.php");

                        $password = md5(md5("dj4fJsd".$password."gd34aH"));
                        // vær sikker på login info er korrekt
                        $query = mysql_query("SELECT * FROM brugere WHERE brugernavn='$bruger'");
                        $numrows = mysql_num_rows($query);
                        if ($numrows == 1){
                            $row = mysql_fetch_assoc($query);
                            $dbbrugerID = $row['id'];
                            $dbbruger = $row['brugernavn'];
                            $dbpass   = $row['password'];
                            $dbactive = $row['active'];

                            if($password == $dbpass){
                                if($dbactive == 1){

                                    $_SESSION['brugerID'] = $dbbrugerID;
                                    $_SESSION['brugernavn'] = $dbbruger;

                                    echo "Du er nu logget ind som <b>$dbbruger</b>. <a href='medlem.php'>Klik her</a> for at gå til Medlems siden!";
                                }
                                else
                                    echo "Du skal aktivere din konto for at logge ind. $form";

                            }
                            else
                                echo "Du intastede ikke det korrekte password. $form";

                        }
                        else
                            echo "Det intastede brugernavn blev ikke fundet. $form";


                        mysql_close();
                    }
                    else
                        echo "Du skal skrive dit password! $form";

                }
                else
                    echo "Du skal skrive et brugernavn! $form";

        }
        else
            echo $form;


    ?>

2 ответа

Решение

Давайте внимательнее посмотрим на это ваше сообщение об ошибке:

Предупреждение: mysql_num_rows() ожидает...

АГА! Так mysql_num_rows() вызывает проблемы. Хорошо, что у вас это есть только один раз в вашем коде, так как я не хотел считать ваши строки, находя ту, которая вызвала эту ошибку

... ожидает, что параметр 1 будет ресурсным, логическое значение задано...

О, значит что-то не так с параметром. Давайте внимательно посмотрим на ваш код:

$query = mysql_query(...);
$numrows = mysql_num_rows($query);

Так $query такое логическое (истина / ложь) - как это может быть? Да, руководство всегда знает лучше

Для SELECT, SHOW, DESCRIBE, EXPLAIN и других операторов, возвращающих набор результатов, mysql_query() возвращает ресурс в случае успеха или FALSE в случае ошибки.

Для операторов SQL другого типа INSERT, UPDATE, DELETE, DROP и т. Д. Mysql_query () возвращает TRUE в случае успеха или FALSE в случае ошибки.

mysql_query () также завершится ошибкой и вернет FALSE, если у пользователя нет прав доступа к таблицам, на которые ссылается запрос.

Таким образом, проблема в том, что ваш запрос, вероятно, не удается и, следовательно, возвращает false который не является допустимым ресурсом, а скорее логическим


Также имейте в виду, что mysql_* функции официально устарели и, следовательно, не должны использоваться в новом коде. Вместо этого вы можете использовать PDO или MySQLi. Смотрите этот ответ на SO для получения дополнительной информации.

Похоже, что функция запроса возвращает false (запрос не выполнен), а false также задано как параметр в mysql_num_rows. Есть несколько возможных причин сбоя запроса, возможно, база данных не существует или что-то еще.

Другие вопросы по тегам