我正试图为我的网站创建一个登录系统,但每次运行时都会出现一个错误,上面写着:
警告: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作为参数给定。查询可能失败的原因有几种,可能是数据库不存在或其他原因。