我想做一个;“用户使用”;此php代码中的验证,它给出以下错误:

我想做一个;“用户使用”;此php代码中的验证,它给出以下错误:,php,validation,Php,Validation,这是我使用的代码: <?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";

这是我使用的代码:

<?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();
 }


 ?>
我知道“记录已成功插入”,但用户名已被占用。验证不起作用。 我不擅长php,所以如果您告诉我如何简单地修复此代码,我会很高兴

请帮帮我

$dbunames = mysqli_query("SELECT * FROM entity WHERE username='$username'");
需要使用$conn变量,如下所示:

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

您需要添加$conn作为查询中的第一个参数。因为您的查询没有正确执行,
mysql\u num\u rows()
也不起作用

改变

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

此外,您现在编写的查询对于sql注入是不安全的。您应该花30分钟阅读如何使用参数化查询。这一点都不坏,现在就学习它,这样您就可以确保所有后续查询都正确编码。这是正确的做法。 下面是一个很好的链接,它将解释使用mysqli的参数化查询

下面是一个如何正确编码上面的查询的示例

$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();
正如我在评论中所说:
mysqli\u query
函数需要传递两个参数

更改此项:

$dbunames = mysqli_query("SELECT * FROM entity WHERE username='$username'");
对于这一点:

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

您忘记在
//Create connection
部分添加$conn变量,因此它应该是:

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

另外,始终将密码存储为哈希

将“mysqli_查询”更改为此行:
$dbunames=mysqli_查询($conn,“SELECT*FROM entity,其中username='$username')
您在mysqli_查询中缺少
$conn
,该查询需要传递两个参数。错误消息告诉您需要知道的一切
mysqli_query()需要至少两个参数,其中一个给定的
也不熟悉
filter_输入
,但从手册上看,这对您当前的设置没有任何帮助<代码>这将导致默认情况下不进行任何筛选。参数化您的查询。@user3783243那么如何防止sql注入(在此代码中)?@Daniel参数化查询,如下答案所示。不要将用户数据放入查询,最好不要将值放入查询。如果需要输入值,请将它们放在占位符中并进行绑定。关于这个话题,已经有一些帖子了,这是我能用的最简单的解释。@user3783243我不反对投票。它的意思。我不想卑鄙,谢谢!我不知道我必须这么做(它们是纯文本)。
$dbunames = mysqli_query($conn, "SELECT * FROM entity WHERE username='$username'");
$dbunames = mysqli_query($conn, "SELECT * FROM entity WHERE username='$username'");