【发布时间】:2019-12-04 14:25:47
【问题描述】:
我有一个注册表单,但有一些问题。这是我的第一份登记表。数据收集需要的地方。
但是当有人注册时,PHPMyAdmin 中有很多重复的数据。我尝试了各种方法,但你知道,我只是一个学生。我想防止重复的电子邮件数据。
<?php
$link = mysqli_connect("localhost", "xxxx", "", "db");
// Check connection
if($link === false){
die("ERROR: Could not connect. " . mysqli_connect_error());
}
// Escape user inputs for security
$nama = mysqli_real_escape_string($link, $_REQUEST['nama']);
$nohp = mysqli_real_escape_string($link, $_REQUEST['nohp']);
$email = mysqli_real_escape_string($link, $_REQUEST['email']);
$instagram = mysqli_real_escape_string($link, $_REQUEST['instagram']);
$sql = "INSERT INTO event (nama, nohp, email, instagram) VALUES ('$nama', '$nohp', '$email', '$instagram')";
if(mysqli_query($link, $sql)){
echo "<p class='text-center'>Pendaftaran Berhasil. Akan kembali ke halaman utama dalam 5 detik.<br/>
Atau klik <a href='index.php'>HOME</a></p>";
} else{
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}
// close connection
mysqli_close($link);
?>
我需要在其中添加什么代码,以使已注册电子邮件的人无法再次注册?
对不起我的英语不好
【问题讨论】:
-
使电子邮件列唯一
-
你应该使用准备好的语句而不是转义输入。
-
@Tim OP 正在转义输入,因此除非有一些模糊的字符集配置,否则该值将变为
example@email.com\',\'\'); DELETE FROM event;--。最好使用准备好的语句,是的!但是转义在几乎所有情况下都有效(但它不是 100% 万无一失的,而且会导致代码混乱)。 -
当您丢失数据库时,@Qirel 几乎所有还不够好。参数化查询(或准备好的语句)始终有效。