2010-02-25 7 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; 
     } 
     ?> 

를 나는 내가 그것을 모두를 구현할 수 같은데요 :

편집
이것은 내가 ... 내가 어떻게 여기에 두 가지 답변을 구현하는 것이 훨씬 행을 삽입하는 무슨이다 if ... else 문?

답변

1

if else 문과 함께 SQL 문을 사용했습니다.

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

하나를 삽입 할 수 있도록 추가되는 모든 중복을 방지하기 위해 오류 메시지 " – sholsinger

3

삽입하기 전에, (parametrized SQL 사용)

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

같은 SQL 문 뭔가를 실행하고 행의 수를 반환 계산합니다.

0 이상인 경우 중복이 있습니다.

OMG 조랑말은이 두 필드에 대한 제약 조건을 제안했습니다. 이는 데이터베이스를 실수로 만들지 않도록하기위한 좋은 아이디어이기도합니다. 그러나 복제본을 삽입하면 모든 구속 조건은 파싱을 시도하거나 원치 않을 수도있는 데이터베이스 오류 메시지가됩니다.

+0

나는 if 문과 함께 SQL 문을 사용했습니다. mysql_select_db ($ database_speedycms, $ speedycms); $ query_usercheck = "SELECT * FROM tbl_users 어디에서 username = '$ user' OR 이메일 = '$ 이메일'"; $ 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

+1

하나의 쿼리가 아마도 더 이상의 –

+0

입니다 삽입 할 수 있도록 추가되는 모든 중복을 방지하기 위해 오류 메시지. 나는 결코 그런 식으로 시도한 적이 없다는 것을 인정합니다. –