2013-07-21 138 views
1

我一直在做登录/注册系统,我遇到的一个问题是不允许注册重复的电子邮件地址。我希望它能够工作,以便数据库不会接受来自重复电子邮件的数据,并且用户也会收到警报。我对PHP很陌生,所以我不确定如何做到这一点。谢谢。如何防止重复的电子邮件地址被注册?

我的PHP

if (empty($_POST['email'])) { 
    $error[] = 'Please Enter your Email '; 
} else { 

    if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._- ]+)+$/", $_POST['email'])) { 
     //regular expression for email validation 
     $Email = $_POST['email']; 
    } else { 
     $error[] = 'Your Email Address is invalid '; 
    } 


} 


if (empty($_POST['Password'])) { 
    $error[] = 'Please Enter Your Password '; 
} else { 
    $Password = $_POST['Password']; 
} 


if (empty($error)) //send to Database if there's no error ' 

{ // If everything's OK... 

    // Make sure the email address is available: 
    $query_verify_email = "SELECT * FROM members WHERE Email ='$Email'"; 
    $result_verify_email = mysqli_query($dbc, $query_verify_email); 
    if (!$result_verify_email) {//if the Query Failed ,similar to if($result_verify_email==false) 
     echo ' Database Error Occured '; 
    } 

    if (mysqli_num_rows($result_verify_email) == 0) { // IF no previous user is using this email . 


     // Create a unique activation code: 
     $activation = md5(uniqid(rand(), true)); 


     $query_insert_user = "INSERT INTO `members` (`Username`, `Email`, `Password`, `Activation`) VALUES ('$username', '$Email', '$Password', '$activation')"; 


     $result_insert_user = mysqli_query($dbc, $query_insert_user); 
     if (!$result_insert_user) { 
      echo 'Query Failed '; 
     } 

     if (mysqli_affected_rows($dbc) == 1) { //If the Insert Query was successfull. 


mysqli_close($dbc);//Close the DB Connection 

} // End of the main Submit conditional. 

?> 

的HTML

<form action="./index.php#openModal2" method="post" class="registration_form"> 
    <fieldset> 
<legend>Registration Form </legend> 

<p>Create A new Account</p> 

<div class="elements"> 
    <label for="username">Name :</label> 
    <input type="text" id="username" name="username" size="25" /> 
</div> 
<div class="elements"> 
    <label for="email">E-mail :</label> 
    <input type="text" id="email" name="email" size="25" /> 
</div> 
<div class="elements"> 
    <label for="Password">Password:</label> 
    <input type="password" id="Password" name="Password" size="25" /> 
</div> 
<div class="submit"> 
<input type="hidden" name="formsubmitted" value="TRUE" /> 
    <input type="submit" value="Register" /> 
</div> 

回答

5

email列添加一个唯一约束在表members

ALTER TABLE members ADD UNIQUE (email); 

通常,您在创建表格时会执行此操作,而不是随后更改表格。

+0

这似乎意义的,我制作的电子邮件地址只能注册一次,但怎么办我执行这个? – Zippylicious

+0

@Zippylicious。 。 。通过将约束添加到'members'表中,可以在数据库中实现这一点。 –

+0

我想通了。这很好,非常感谢。 – Zippylicious

0

要么添加一个唯一约束的戈登·利诺夫说,这里还是是我做什么..

$check_email_for_duplicates = mysqli_query($dbc, "select * from `members` where `Email` = '".mysqli_real_escape_string($email)."'"); 

    if(mysqli_num_rows($check_email_for_duplicates) > 0) //Email address is unique within this system and must not be more than one 
    { 
     echo 'Sorry, the email <b>'.$email.'</b> is already in use. Please enter a different email.'; 
    } 
    else { 
    //some code 
} 
相关问题