Я получаю досадную ошибку в моей системе входа
Я пытаюсь создать систему входа в систему для моего сайта, но при каждом запуске появляется сообщение об ошибке:
Предупреждение: 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. Есть несколько возможных причин сбоя запроса, возможно, база данных не существует или что-то еще.