2010-02-25 30 views
7

php mysql dosyasında yinelenen kayıtların girişini nasıl önlersiniz? tabloya eklenmeden önce girişi onaylama.php/mysql içinde yinelenen satır ekleme işlemini önleme

Şu anda web sitem için bir kullanıcı kaydı bölümü oluşturuyorum ancak veritabanında yinelenen bir kullanıcı adı veya e-posta adresi bulunursa bunları bir hatayla sunmak istiyorum.

<?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; 
     } 
     ?> 

Ben bir in hepsini uygulamak verebilecek tahmin ediyorum:

DÜZENLEME
Bu benim ... buradan nasıl hem bu cevapları uygulayacağını kadar satır eklemek için gereken budur if ... else ifadesi?

cevap

1

Bir ifade ile birlikte sql ifadesini kullandım.

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); 

sonra

if ($totalRows_usercheck > 0) 

ekran

aksi veritabanı kodu idare" üzerinde uygun veritabanı tasarımı için

17

kullanıcı adı ve e-posta sütunlar için benzersiz kısıtlamaları tanımlayın:

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

değer insertered ya da zaten güncellenmiş tablosunda var olan teşebbüs ederse, MySQL (uygun benzersiz kısıtlamayı ihlal sorguyu belirten bir hata döndürür muhtemelen her ikisi de). Bunu incelikle işlemek için PHP'yi kurmak size kalmıştır.

+1

+ 1 eklemek izin eklenmesini yinelenen önlemek için bir hata mesajı " – sholsinger

3

takmadan önce, (parametrized SQL kullanarak)

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

gibi bir SQL deyimi şey çalıştırın ve satır sayısı döndürdü sayar.

0'dan fazla varsa, bir kopyası var.

OMG Ponies, bu iki alan üzerinde kısıtlamalar getirdi; bu da veritabanında hata yapmanıza engel olmak için çok iyi bir fikir. Ancak, çoğaltılmış eklerseniz, tüm bu kısıtlamalar sizi ayrıştırmaya çalışmak isteyebileceğiniz veya olmayacak bir veritabanı hatası iletisidir.

+0

Bir else ifadesiyle birlikte sql deyimini kullandım. mysql_select_db ($ database_speedycms, $ speedycms); $ query_usercheck = "SELECT * FROM tbl_users WHERE kullanıcı adı = '$ kullanıcı' VEYA e-posta = '$ email'"; $ usercheck = mysql_query ($ query_usercheck, $ speedycms) veya öl (mysql_error()); $ row_usercheck = mysql_fetch_assoc ($ usercheck); $ totalRows_usercheck = mysql_num_rows ($ usercheck); sonra if ($ totalRows_usercheck> 0) ekran aksi veritabanı – methuselah

+1

Bir sorgu Muhtemelen daha iyi ikiden –

+0

olduğunu eklemek izin eklenmesini yinelenen önlemek için bir hata mesajı. Bu şekilde denemediğimi itiraf ediyorum. –

İlgili konular