Как я могу исправить свои коды?
Всегда
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[^]