Faridia Clarity official Ответов: 1

Я пытаюсь вставить данные в базу данных 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

Кроме того, нет абсолютно никаких причин хранить как пароль, так и запись "подтвердить пароль". Вместо этого вам нужно проверить, что эти две записи являются одинаковыми, а затем хэшировать одну копию значения и хранить ее в базе данных.

1 Ответов

Рейтинг:
0

Richard MacCutchan

В строке 20 у вас есть следующее:

$query = mysqli_query($con,$emailquery);

и вы предполагаете, что это удалось. Поэтому когда это не удается и вы пытаетесь использовать
mysqli_num_rows($query);

вы получаете вышеуказанную ошибку. Пожалуйста, прочтите документацию MySQL о возможных значениях результатов от команд SQL.