2014-12-27 51 views
-4

如何做到這一點,讓人們無法多次註冊同一個電子郵件地址。所以他們反而得到一個錯誤。如「對不起,這封郵件已在使用」如何獲取已在使用中的郵件的錯誤消息?

這裏是我的代碼:

<?php 

if(isset($_POST["submit"])){ 

    if(!empty($_POST['user']) && !empty($_POST['pass'])&& !empty($_POST['mail'])) { 
    $user=$_POST['user']; 
    $pass=$_POST['pass']; 
    $mail=$_POST['mail']; 

    $con=mysql_connect('localhost','root','123') or die(mysql_error()); 
    mysql_select_db('ProjectC') or die("cannot select DB"); 


    $query=mysql_query("SELECT * FROM login WHERE username='".$user."'"); 
    $numrows=mysql_num_rows($query); 
    if($numrows==0) 
    { 
     $sql="INSERT INTO login(username,password,mail) VALUES('$user','$pass','$mail')"; 

     $result=mysql_query($sql); 


     if($result){ 
     echo "Account Successfully Created"; 
     } else { 
     echo "Failure!"; 
     } 

    } else { 
     echo "That username already exists! Please try again with another."; 
    } 

    } else { 
    echo "All fields are required!"; 
    } 
} 

?> 
+0

那究竟是什麼問題呢?你有錯誤嗎?錯誤的結果? – Mureinik 2014-12-27 20:35:23

+0

該代碼如何不這樣做? – 2014-12-27 20:35:27

+0

Pepole可以使用同一封電子郵件註冊兩次。但我不想那樣。所以他們會收到一條錯誤消息。例如「抱歉,但電子郵件已被使用」 – 2014-12-27 20:37:27

回答

0

你需要設置你的數據庫表的唯一約束,以便查詢將失敗。

ALTER TABLE login ADD CONSTRAINT unique_email UNIQUE (mail) 

運行此查詢一次(或以其他方式設置從一個數據庫管理工具,像phpMyAdmin的唯一約束)將插入查詢失敗並生成一個錯誤。

1

幾件事情:

  1. 不要使用SELECT *時,你可以列舉列名。
  2. 獲取結果集。 MySQL不太適合未取出的結果集。
  3. 而不是做SELECT something FROM table WHERE conditionSELECT COUNT(*) FROM table WHERE condition,取出一行結果集,然後看看計數。
  4. 考慮在您的mail列中添加一個唯一約束。然後在該列中有重複的插入將失敗。
  5. 請勿使用mysql_ API,而應使用mysqli_PDOmysql_已被棄用,因爲它非常不安全。
相關問題