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

标签 php mysql email

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

此外,我创建了一个数据库,并在该数据库中创建了一个名为 emails 的表,其中只有 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 Injections
  • 即使你设置了一个唯一索引,你也应该在插入它之前进行验证:

    <?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!';
    }
    

关于php - 检查电子邮件是唯一的 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35131149/

相关文章:

php - 从 PHP 调用 "grep"和 "head"

php - 从 MySQL 获取高级数据

mysql - 查询两个查询之间的比率

php - 使用 CodeIgniter 通过 Google 帐户发送电子邮件

使用 Exchange Activesync 的 Android 邮件搜索

php - Codeigniter 插入多对多连接表/数据透视表

php - 如何正确制定3表mysql查询

mysql - 如何从 IF 子句返回时间

php - 插入批量 php mysql,检查重复项和字段重复项的总和值

linux - 使用 Mail::CheckUser 检查电子邮件 ID 是否有效时出错