我的登录系统出现了恼人的错误

时间:2013-11-18 19:55:16

标签: php mysql-num-rows

我正在尝试为我的网站创建一个登录系统,但每次运行它时都会出现错误:

  

警告:mysql_num_rows()期望参数1是资源,布尔值在第46行的C:\ xampp \ htdocs \ _logocs \ 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;


    ?>

2 个答案:

答案 0 :(得分:3)

让我们仔细看看你的错误信息:

  

警告:mysql_num_rows()需要......

AHA!所以mysql_num_rows()导致了问题。好的,你只需要在你的代码中使用一次,因为我不想数你的行找到导致这个错误的行

  

...期望参数1是资源,布尔给定......

哦,所以参数似乎有问题。让我们仔细看看你的代码:

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

所以$query是一个布尔值(true / false) - 这怎么可能?是的,manual always knows best

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他返回结果集的语句,mysql_query()会在成功时返回资源,或者在出错时返回 FALSE

     

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,mysql_query()在成功时返回 TRUE ,在错误时返回 FALSE

     如果用户没有访问查询引用的表的权限,

mysql_query()也将失败并返回 FALSE

所以问题是你的查询可能会失败,因此会返回false,它不是有效的资源,而是布尔值


另请注意,mysql_*函数为officially deprecated,因此不应在新代码中使用。您可以使用PDO或MySQLi。有关详细信息,请参阅this answer on SO

答案 1 :(得分:1)

看起来查询函数returs false(查询失败),而false也在mysql_num_rows中作为参数给出。有几种可能的方法可能导致查询失败,可能是数据库不存在或其他原因。

相关问题