我正在创建一个关于音乐的网站,在我的网站底部,我有一个只有电子邮件提交的表格。我这样做是为了收集用户的电子邮件。
此外,我还创建了一个数据库,在该数据库中,我创建了一个名为电子邮件的表,只有 2 列:id
和 email
.
我想使我收到的电子邮件独一无二,因为现在我正在测试它,我可以放置许多同名的电子邮件。我已经尝试了一些编码来实现这一点,但没有运气,所以我将只发布我目前拥有的代码,所以你可以帮助我添加我需要在该代码中添加什么,以便接收一个唯一的电子邮件地址。
P.S 我将在项目结束时将我的数据库从 mysql 更新到 mysqli。
这是我当前的代码:
<?php
error_reporting(E_ERROR | E_PARSE);
include('../database/db.php');
$email = $_POST['email'];
if($email != "") {
$sql = mysql_query ("INSERT INTO emails (email) VALUES ('$email')");
echo "Thank you for Submitting. Redirecting back to Home Page";
}
?>
- 首先.. 正如@RamRaider已经评论的那样,您必须在
email
列中添加一个唯一的索引 - 其次,您必须停止使用
mysql_*
函数,因为它们已被弃用。您可以使用mysqli_*
函数,MySQLi
类或PDO
。此外,通过使用预准备语句,可以避免 SQL 注入 -
即使设置了唯一索引,也应始终在插入之前进行验证:
<?php // PDO instantiation here $stmt = $pdo->prepare('SELECT COUNT(email) AS EmailCount FROM emails WHERE email = :email'); $stmt->execute(array('email' => $_POST['email'])); $result = $stmt->fetch(PDO::FETCH_ASSOC); if ($result['EmailCount'] == 0) { $stmt = $pdo->prepare('INSERT INTO emails (email) VALUES (:email)'); $stmt->execute(array('email' => $_POST['email'])); echo 'Thank you for Submitting. Redirecting back to Home Page'; } else { echo 'E-mail exists!'; }
error_reporting(E_ERROR | E_PARSE);
include('../database/db.php');
$email = $_POST['email'];
if($email != "") {
$result = mysql_query("SELECT * FROM emails where email='".$email."'");
$num_rows = mysql_num_rows($result);
if($num_rows >= 1){
echo "email exist";
}else{
$sql = mysql_query ("INSERT INTO emails (email) VALUES ('$email')");
echo "Thank you for Submitting. Redirecting back to Home Page";
}
}
将代码替换为此:)
注意:这不会涉及您需要如何清理 PHP。(有用的提示)
正如@RamRaider建议的那样,将电子邮件列更新为 unuiqe。
然后将mysql_query()
的结果设置为一个变量,可以检查该变量以查看是否有有效的执行。
$result = mysql_query("INSERT INTO emails (email) VALUES ('$email')");
if (mysql_num_rows($result)) {
// Something good happened and email was unuiqu
}
else{
// well we have encountered a problem and need to fix that or inform he user
}
如您所见,它将检查您尝试执行的结果,以确定是否添加了成功的项目。
您可以在插入之前检查电子邮件,如下所示
if($email != "") {
$sql = mysql_query ("select * from `emails` where email='".$email."'");
$fetch = mysql_num_rows($sql);
if($fetch>0)
{
echo "email already inserted";
}
else
{
$sql = mysql_query ("INSERT INTO emails (email) VALUES ('$email')");
echo "Thank you for Submitting. Redirecting back to Home Page";
}}