我想做一个;“用户使用”;此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'");