检查电子邮件是否是唯一的 php


Check email to be unique php

我正在创建一个关于音乐的网站,在我的网站底部,我有一个只有电子邮件提交的表格。我这样做是为了收集用户的电子邮件。

此外,我还创建了一个数据库,在该数据库中,我创建了一个名为电子邮件的表,只有 2 列:idemail .

我想使我收到的电子邮件独一无二,因为现在我正在测试它,我可以放置许多同名的电子邮件。我已经尝试了一些编码来实现这一点,但没有运气,所以我将只发布我目前拥有的代码,所以你可以帮助我添加我需要在该代码中添加什么,以便接收一个唯一的电子邮件地址。

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";
}}