Я пытаюсь вставить данные в базу данных mysql с помощью PHP, но всегда эта ошибка возникает. Пожалуйста, помогите мне, как я могу решить эту проблему
i am trying to insert data into mysql database using php but always bellow error showing. please help me how can i solve this
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, bool given in C:\xampp\htdocs\test\regis.php on line 21
Что я уже пробовал:
1 <?php 2 3 include 'dbcon.php'; 4 5 if (isset($_POST['SIGNUP'])) { 6 7 # code... 8 $name = mysqli_real_escape_string($con, $_POST['name']); 9 $user_name = mysqli_real_escape_string($con, $_POST['user_name']); 10 $phone_number = mysqli_real_escape_string($con, $_POST['phone_number']); 11 $email = mysqli_real_escape_string($con, $_POST['email']); 12 $password = mysqli_real_escape_string($con, $_POST['password']); 13 $conform_password = mysqli_real_escape_string($con, $_POST['conform_password']); 14 15 $pass = password_hash($password, PASSWORD_BCRYPT); 16 $cpass = password_hash($conform_password, PASSWORD_BCRYPT); 17 18 19 $emailquery = "select * from admin where email='$email'"; 20 $query = mysqli_query($con,$emailquery); 21 $emailcount = mysqli_num_rows($query); 22 23 if ($emailcount>0) { 24 25 echo "email already exist"; 26 # code... 27 } 28 else{ 29 if ($password === $conform_password) { 30 31 $insertquery = "INSERT INTO admin (name, user_name, phone_number, email, password, conform_password)values('$name','$user_name','$phone_number','$email','$password','$cpass')"; 32 $iquery = mysqli_query($con, $insertquery); 33 if ($iquery) { 34 # code... 35 ?> 36 37 <script> 38 alert("Data inserted successfully"); 39 </script> 40 41 <?php 42 } 43 else{ 44 ?> 45 46 <script> 47 alert("Data not inserted"); 48 </script> 49 50 <?php 51 } 52 53 } 54 else{ 55 56 ?> 57 58 <script> 59 alert("Data inserted successfully"); 60 </script> 61 62 <?php 63 64 } 65 } 66 67 } 68 69 70 ?>
Richard Deeming
Первая проблема: ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
PHP: SQL-инъекция - руководство пользователя[^]
Richard Deeming
Вторая проблема: даже если вы хэшируете пароль, вы все еще храните пароль в виде обычного текста.
Весь смысл хэширования пароля заключается в том, что вы НЕ сохраните исходный текстовый пароль.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]
NB: Вы хэшировали пароль и сохранили хэш-значение в базе данных. $pass
переменная. Но ты все равно вставляешь $password
в базу данных, которая представляет собой незашифрованную текстовую версию пароля.
Richard Deeming
Кроме того, нет абсолютно никаких причин хранить как пароль, так и запись "подтвердить пароль". Вместо этого вам нужно проверить, что эти две записи являются одинаковыми, а затем хэшировать одну копию значения и хранить ее в базе данных.