PHP MYSQL阻止用户或电子邮件插入两次

PHP MYSQL阻止用户或电子邮件插入两次,php,mysql,insert,duplicates,Php,Mysql,Insert,Duplicates,我想防止如果用户输入相同的电子邮件两次,这将创建重复的条目。请帮我解决这个小问题,我已经搜索了stackoverflow来解决这个问题,但是每个人都有自己的数据库和自己的方法 多谢各位 <form action="create_subscriber.php" method="post"> <input placeholder="Name" name="inputName" type="name" required/> <input n

我想防止如果用户输入相同的电子邮件两次,这将创建重复的条目。请帮我解决这个小问题,我已经搜索了stackoverflow来解决这个问题,但是每个人都有自己的数据库和自己的方法

多谢各位

 <form action="create_subscriber.php" method="post">
      <input placeholder="Name" name="inputName" type="name" required/>   
      <input name="inputEmail" placeholder="example@email.com" name="Submit" type="email" required/>
      <input name="Submit" type="submit" value="Subscribe"/>
 </form>
在下面创建_subscriber.php

<?php
//include 'connection.php'

$dbhost = "localhost";
$dbuser = "sampleuser";
$dbpass = "samplepass";
$dbname = "sampledb";

$conn = mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

    $name = $_POST['inputName'];
    $email = $_POST['inputEmail'];

if(!$_POST['Submit']){
       echo "Please enter a name & email";
        //header('Location: index.php');

}else{
    mysql_query("INSERT INTO subscriptions 
(`ID`,`Name`, `Email`) VALUES(NULL,'$name', '$email' ) ") 
or die(mysql_error());  

    echo "User has been added";
    header('Location: success.php');
}

?>

由于您不进行任何验证,因此可以将电子邮件用作唯一字段并执行替换查询


我强烈建议您在尝试进行二次插入之前,以查询检查的形式对数据库进行验证。通过持久连接的可用性,您甚至可以轻松完成验证查询,这样您就不需要花费很少的时间来完成验证查询。

只需执行一个初步查询来检查电子邮件的唯一性

SELECT * FROM subscriptions WHERE `email` = ?
我以事先准备好的语句的形式编写了这个查询

您应该使用prepared语句将值注入查询中

如果您得到任何行,则电子邮件不是唯一的,因此重定向到原始表单页面,可能会显示错误消息

如果未获得任何记录,则可以继续插入,然后呈现邮件注册成功页面


顺便说一句:你不能回显某个内容然后设置标题。开始发送输出时,无法设置/更改标题。

对列设置唯一的约束。查询中不需要额外的检查。只要处理好失败。或者,您可以使用mysql\u num\u rows或COUNT预查询select。有很多方法可以做到这一点。使电子邮件列唯一,如果复制数据库将不会插入任何内容,并会给出错误,您还可以设置一种方法,在插入之前检查数据库中的电子邮件。一个select语句检查是否已经有一封电子邮件以及停止进程的条件..我尝试了这个方法,这是我得到的错误您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,了解在“WHERE NOT EXISTS SELECT Email FROM subscriptions WHERE Email=”附近使用的正确语法jack@eaxmple.com在1号线
SELECT * FROM subscriptions WHERE `email` = ?