Akhil Mathew Ответов: 2

Mysqli_num_rows() ожидает, что параметр 1 будет mysqli_result, bool [кто-нибудь решите это]


<?php
include "test.php";
 ?>
 
<html>

<head>
    <title>Login </title>
</head>

<body>
	<form name="login_form" class="form-vertical" action="" method="post">
		<h3>Login Page</h3>
		Username: <input type="text" name="username" required/>
		Password: <input type="password"  name="password" required/>
		<center>
            <input type="submit" name="submit_1" value="Login" />
        </center>
	 </form>
	<?php
		if (isset($_POST["submit_1"]))
		{
			$username=$_POST["username"];
			$password=$_POST["password"];
			$count=0;
			$sql="select * from employee where username='$username'&& password='$password'";
			$res=mysqli_query($conn,$sql);
			$count=mysqli_num_rows($res);
			if($count>0&&!$res)
			{
			 header("Location:index.php");
			}
			else
            {
        ?>
		<div>Invalid Username or Password</div>
    <?php
            }

	}
    ?>
</body>

</html>


Что я уже пробовал:

Он всегда показывает "неверное имя пользователя или пароль".

Richard Deeming

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк / интерполяцию для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

PHP: SQL-инъекция - руководство пользователя[^]

Richard Deeming

Вы храните пароли в виде обычного текста. НИКОГДА сделать это.
Безопасная Аутентификация Паролем Объясняется Просто[^]

PHP даже имеет встроенные функции, которые помогут вам сделать все правильно:
PHP: password_hash[^]
РНР: функцию password_verify[^]

Richard Deeming

MySQL :: MySQL 8.0 Справочное Руководство :: 12.4.3 Логические Операторы[^]
"Оператор & & amp; является нестандартным расширением MySQL. Начиная с MySQL 8.0.17, этот оператор устарел и поддержка его будет удалена в будущей версии MySQL."

2 Ответов

Рейтинг:
1

Richard MacCutchan

Скорее всего, потому, что имя пользователя и пароль не найдены в базе данных. И сообщение об ошибке подтверждает это: см. Mysqli_fetch_array() ожидает, что параметр 1 будет mysqli_result, логическое значение задано в[^].


CPallini

5.

Рейтинг:
1

CPallini

Как уже отмечалось Ричард- ваш запрос не удался. Смотрите, например Функция PHP mysqli query() [^] (взгляните на раздел "возвращаемое значение").
Вы должны проверить $res значение, перед вызовом mysqli_num_rows($res) например ,

if ( $res )
{
  $count=mysqli_num_rows($res);
  //...
}
else
{
  // handle here the query failure
}


Richard MacCutchan

5 для вас. Интересно, сколько еще раз нам нужно будет опубликовать этот ответ?

CPallini

:-)
- Спасибо, Ричард.