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

时间:2015-03-06 12:50:57

标签: php mysql insert duplicates

我想阻止用户输入两次相同的电子邮件,这将创建重复的条目。请帮我解决这个小问题,我已经搜索了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>

下面的create_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');
}

?>

3 个答案:

答案 0 :(得分:0)

mysql_query("INSERT INTO subscriptions 
(`ID`,`Name`, `Email`) VALUES (NULL,'$name', '$email' ) 
WHERE NOT EXISTS (
     SELECT email FROM subscriptions WHERE email='$email'
)") 

答案 1 :(得分:0)

由于您未进行任何验证,因此您可以将电子邮件用作唯一字段并执行REPLACE查询。 http://dev.mysql.com/doc/refman/5.0/en/replace.html

我强烈建议您在尝试进行辅助插入之前,以对数据库的查询形式编写验证。通过持久连接可以使它变得容易,因此您不需要花费很少的时间来进行验证查询。

答案 2 :(得分:0)

只需执行初步查询即可检查电子邮件唯一性

SELECT * FROM subscriptions WHERE `email` = ?

(我以预备声明

的形式编写了查询

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

您应该使用预准备语句将值注入查询中。

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

如果您没有获得任何记录,那么您可以继续insert,然后呈现“邮件注册成功”页面。

顺便说一句:你不能echo某事,然后设置标题。当您开始发送输出标头时,无法设置/更改。