【发布时间】:2015-02-19 13:33:30
【问题描述】:
是的,我知道以前有人问过这个问题,我从这个网站的多个答案中复制了代码,试图让它工作。这是我现在一直在使用的代码,但它一直允许我输入重复的条目。
$query = mysqli_query($con, "SELECT * FROM Email WHERE Email = '".$testemail. "'");
if(mysqli_num_rows($query) > 0){
echo "Email is already in use.<br>";
}else{
$query = mysqli_query($con, "SELECT * FROM Username WHERE Username = '".$testname. "'");
if(mysqli_num_rows( $query) > 0){
echo "Username is already in use.<br>";
}else{
$sql = "INSERT INTO users (Username, Password, Email, Firstname, Lastname, Lastlogin, Registered) VALUES ('$testname', '$testpass', '$testemail', '$testfirstname' , '$testlastname', '$lastlogin', '$registered')";
if ($conn->query($sql) === TRUE) {
echo "New account created successfully<br>";
}
}
}
是应该阻止这种情况发生的具体代码,但here is the full page:
我第一次使用这样的登录系统,所以如果我犯了一些愚蠢的错误,我不会感到惊讶。
编辑:我尝试编辑它,但它仍然无法正常工作,我还在我的数据库中设置了“电子邮件”和“用户名”列唯一。但这所做的只是完全阻止数据的输入。我还尝试了一种解决方法,它在错误号 1062 处显示错误,但这种情况还没有奏效。
我也错过了一些明显的东西,我使用的是 IF 语句,所以它只会在我认为时循环通过 fie 查询检查
【问题讨论】:
-
比较的值是什么?如果这些值确实应该是唯一的,那么对数据库列设置唯一约束也会有所帮助。旁注:您可能对这段代码的 SQL 注入攻击持开放态度。
-
在代码链接中,他使用 mysqli_real_escape_string 进行 sql 注入。例如$testname = mysqli_real_escape_string($con, $_POST['username']);
-
是的,我的一位朋友告诉我使用 mysqli_real_escape_strings 作为主计数器而不是那些。有没有更好/更安全的方法来保护与注射?
-
@Crecket:准备好的语句有帮助,并带来其他性能优势:php.net/manual/en/mysqli.quickstart.prepared-statements.php