Kristine Viray Ответов: 2

Как я могу исправить свои коды?


Всегда
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\REVIEW\index.php on line 16



Это мой код.

<?php
$servername = "localhost";
$username = "";
$password = "";
$remarks= "";
$con = mysqli_connect('localhost', 'root', '', 'firstdb');
if (!$con) {
  die("Connection failed: " . mysqli_connect_error());
}
if(!(empty($_POST["uname"]) && empty($_POST["pin"])))
{
    $UN=$_POST["uname"];
    $PW=$_POST["pin"];
    $sql = "SELECT * FROM users WHERE username=''".$UN." AND password=''".$PW. ";";
	$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0) {
     header( "Location: Main.php" );
     }
   $remarks ="Sorry. Unrecognized username or password.Please try again";
 }
?>

<html>
  <body>
    <form action="index.php" method="post">
      <fieldset>
        <legend>Registration Details:</legend>
        <label for="uname">Username:</label><br>
        <input type="text" id="uname" name="uname" ><br>
        <label for="pin">PIN Code:</label><br>
        <input type="password" id="pin" name="pin" <br><br>
        <input type="submit" value="Register"> <br> 
       <label ><?php echo $remarks; ?></label><br></fieldset>
    </form> 
  </body>
</html> 


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

Я попытался изменить некоторые из них, даже проверить свои точки с запятой и скобки, я новичок, поэтому мне потребовалось так много времени, чтобы исправить это.

Richard Deeming

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

Richard Deeming

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

(И нет, называя его "pin-кодом" вместо "пароля", это не меняет этого.)

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

2 Ответов

Рейтинг:
0

Richard Deeming

Цитата:
$sql = "SELECT * FROM users WHERE username=''".$UN." AND password=''".$PW. ";";
Вы неправильно построили свой запрос. При попытке выполнить этот запрос вы получите синтаксическую ошибку MySQL.

Использование правильно параметризованного запроса исправит это и исправит ваши ошибки. SQL-инъекция[^] уязвимость:
PHP: SQL-инъекция - руководство пользователя[^]
РНР: Подготовленные инструкции и хранимые процедуры - руководство пользователя[^]

Теперь вам просто нужно исправить ваше небезопасное хранилище паролей.
PHP: password_hash[^]
РНР: функцию password_verify[^]