я пытаюсь сделать "пользователь забрал" проверку в этом PHP-коде, и это дает мне эту ошибку: - PullRequest
0 голосов
/ 25 августа 2018

это код, который я использовал:

<?php
$username = filter_input(INPUT_POST, 'username');
$password = filter_input(INPUT_POST, 'password');
if (!empty($username)){
if (!empty($password)){
$host = "localhost";
$dbusername = "root";
$dbpassword = "1234";
$dbname = "admin";

// Create connection
$conn = new mysqli ($host, $dbusername, $dbpassword, $dbname);


$dbunames = mysqli_query("SELECT * FROM entity WHERE username='$username'");



if (mysqli_num_rows($dbunames) > 0 ) { //check if there is already an entry 
for that username
    echo "Already taken";
  }



 else{
 $sql = "INSERT INTO entity (username, password)
 values ('$username','$password')";
 if ($conn->query($sql)){
  echo "New record is inserted sucessfully";
 }
 else{
  echo "Error: ". $sql ."
 ". $conn->error;
}
$conn->close();
}
}
else{
 echo "Password should not be empty";
die();
}
}
 else{
 echo "Username should not be empty";
 die();
 }


 ?>

и это ошибка (в Интернете):

 Warning: mysqli_query() expects at least 2 parameters, 1 given in 
 C:\xampp\htdocs\form\connect.php on line 15

 Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, null 
 given in C:\xampp\htdocs\form\connect.php on line 19
 New record is inserted sucessfully

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

, пожалуйста, помогите мне !!!

Ответы [ 3 ]

0 голосов
/ 25 августа 2018

Вам необходимо добавить $ conn в качестве первого параметра в вашем запросе.Поскольку ваш запрос выполняется неправильно, mysql_num_rows() также не работает.

Измените

 $dbunames = mysqli_query("SELECT * FROM entity WHERE username='$username'");

на

$dbunames = mysqli_query($conn, "SELECT * FROM entity WHERE username='$username'");

Кроме того, ваш запрос как естьнаписано сейчас не безопасно от SQL инъекций.Вы должны потратить 30 минут, чтобы прочитать, как использовать параметризованные запросы.Это совсем не плохо, изучите его сейчас, чтобы вы могли убедиться, что все ваши запросы в будущем будут правильно закодированы.Это просто правильно.Вот хорошая ссылка для чтения, которая объяснит параметризованные запросы, используя mysqli. Хорошая практика SQL

Вот пример того, как правильно кодировать ваш запрос, который у вас есть выше.

$stmt = $conn->prepare("SELECT * FROM entity WHERE username = ?");
$stmt->bind_param("s", $username);
$stmt->execute();
$result = $stmt->get_result();

if($result->num_rows > 0){

echo "That username is already taken.";

}

$stmt->close();
0 голосов
/ 25 августа 2018

Как я уже сказал в своем комментарии: mysqli_query функция должна передавать два параметра.

Измените это:

$dbunames = mysqli_query("SELECT * FROM entity WHERE username='$username'");

на это:

$dbunames = mysqli_query($conn, "SELECT * FROM entity WHERE username='$username'");
0 голосов
/ 25 августа 2018
$dbunames = mysqli_query("SELECT * FROM entity WHERE username='$username'");

необходимо использовать переменную $ conn следующим образом:

$dbunames = mysqli_query($conn, "SELECT * FROM entity WHERE username='$username'");
...