2010-02-25 97 views
7

如何防止重複記錄在php mysql中的輸入?在插入表之前驗證輸入。在php/mysql中防止重複行插入

我目前正在爲我的網站構建一個用戶註冊部分,但如果在數據庫中找到重複的用戶名或電子郵件地址,他們想向他們展示錯誤。

編輯
這是我不得不遠到插入行......怎麼會在這裏我實現這兩種回答:

<?php 
     if (array_key_exists('confirm',$_POST)) { 

       $Cuser = $_POST['Cuser']; 
       $Cemail = $_POST['Cemail']; 
       $Cpassword = $_POST['Cpassword']; 
       $md5password = md5($_POST['Cpassword']); 

       mysql_query("INSERT INTO tbl_users (`username`,`email`,`password`) 
VALUES ('$Cuser', '$Cemail', '$md5password')"); 

       echo "Thank you. The user <b>".$Cuser."&nbsp;(".$Cemail.")</b> has been successfully added to the database.<p> 

       <a href='myaccount.php' class='form'>Return</a>";  

       exit; 
     } 
     ?> 

我猜,我可以實現這一切在如果... else語句?

回答

1

我使用了sql語句以及if else語句。

mysql_select_db($database_speedycms, $speedycms); 
$query_usercheck = "SELECT * FROM tbl_users WHERE username='$user' OR email='$email'"; 
$usercheck = mysql_query($query_usercheck, $speedycms) or die(mysql_error()); 
$row_usercheck = mysql_fetch_assoc($usercheck); 
$totalRows_usercheck = mysql_num_rows($usercheck); 

然後

if ($totalRows_usercheck > 0) 

顯示錯誤消息,以防止任何重複被添加

否則允許數據庫插入

17

定義唯一約束的用戶名和電子郵件列:

ALTER TABLE your_table ADD CONSTRAINT uk_username UNIQUE (username) 
ALTER TABLE your_table ADD CONSTRAINT uk_email UNIQUE (email) 

如果該值試圖將insertered或更新已經存在於表中,MySQL將返回錯誤提示的查詢違反了相應的唯一約束(可能兩者)。這是由你來設置PHP來處理這個優雅。

+1

1爲適當的數據庫設計在「處理它的代碼「 – sholsinger 2010-12-02 16:02:21

3

之前插入,運行SQL語句類似

SELECT * FROM users WHERE users.name = :name OR users.email = :email 

(使用parametrized SQL)和計數的行數返回。

如果超過0,則有重複。

OMG Ponies建議對這兩個字段進行約束,這也是防止您在數據庫中犯錯的一個好主意。然而,如果你插入一個重複的,那麼所有的約束都會得到你是一個數據庫錯誤信息,你可能想也可能不想嘗試解析。

+0

我使用了sql語句以及if else語句。 mysql_select_db($ database_speedycms,$ speedycms); $ query_usercheck =「SELECT * FROM tbl_users WHERE username ='$ user' OR email ='$ email'」; $ usercheck = mysql_query($ query_usercheck,$ speedycms)或die(mysql_error()); $ row_usercheck = mysql_fetch_assoc($ usercheck); $ totalRows_usercheck = mysql_num_rows($ usercheck); 然後 如果($ totalRows_usercheck> 0) 顯示錯誤消息,以防止任何重複被添加 否則允許數據庫插入 – methuselah 2010-02-25 03:08:45

+1

一個查詢好於二級 – 2010-02-25 03:09:26

+0

可能。我承認我從來沒有這樣試過。 – 2010-02-25 04:22:57