我的登录系统出现了一个烦人的错误


I get an annoying error on my login system

我正试图为我的网站创建一个登录系统,但每次运行时都会出现一个错误,上面写着:

警告:mysql_num_rows()要求参数1为resource,布尔值在第46行C:''examplep''htdocs''login_system''includes''login.php中给定。

我在网上搜索了一个问题,并尝试了一些方法,但似乎不起作用,所以如果有人能找出,请帮我

这是我的代码:

<?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;

    ?>

让我们仔细看看您的错误消息:

警告: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(查询失败),并且在mysql_num_rows中也将false作为参数给定。查询可能失败的原因有几种,可能是数据库不存在或其他原因。