2010-02-25 2 views
7

как предотвратить запись дубликатов записей в php mysql? проверка ввода перед вставкой в ​​таблицу.предотвращение повторной вставки строк в php/mysql

В настоящее время я создаю раздел регистрации пользователей для своего сайта, но хочу представить их с ошибкой, если в базе данных найдено дублирующее имя пользователя или адрес электронной почты.

EDIT
Это то, что я должен далеко вставить строки ... как бы я реализовать оба эти ответы здесь:

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

Я использовал заявление 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

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' ИЛИ 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

+1

один запрос лучше, чем два –

+0

Возможно. Я признаю, что никогда не пробовал. –

Смежные вопросы