2010-02-25 10 views
7

¿cómo se evita la entrada de registros duplicados en php mysql? validación de entrada antes de la inserción a la tabla., prevención de la inserción de filas duplicadas en php/mysql

Actualmente estoy creando una sección de registro de usuarios para mi sitio web pero quiero presentarles un error si se encuentra un nombre de usuario o dirección de correo electrónico duplicados en la base de datos.

EDITAR
Esto es lo que tengo ahora a insertar filas ... ¿cómo iba a poner en práctica estas dos respuestas aquí:

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

supongo que podría poner en práctica todo en una si ... ¿otra declaración?

Respuesta

1

utilicé la instrucción sql junto con una instrucción 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); 

entonces

if ($totalRows_usercheck > 0) 

pantalla un mensaje de error para evitar los duplicados se agreguen

de otro modo permiten que la base de datos insertar

17

definir restricciones únicas para las columnas de nombre de usuario y correo electrónico:

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

Si el valor de intentar ser insertered o ya actualizado que existe en la tabla, MySQL devolverá un error que indica la consulta viola la restricción única apropiada (posiblemente ambos). Depende de usted configurar PHP para manejar esto con gracia.

+1

1 para el diseño de base de datos adecuado sobre "manejarlo en el código " – sholsinger

3

Antes de insertar, ejecutar una instrucción SQL algo así como

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

(usando parametrized SQL) y contar el número de filas devueltas.

Si hay más de 0, hay un duplicado.

OMG Ponies sugirió restricciones en esos dos campos, lo que también es una muy buena idea para evitar que se equivoque con la base de datos. Sin embargo, si inserta un duplicado, toda esa restricción lo obtendrá es un mensaje de error de base de datos que puede o no puede intentar analizar.

+0

utilicé la instrucción sql junto con una instrucción if else. mysql_select_db ($ database_speedycms, $ speedycms); $ query_usercheck = "SELECCIONAR * FROM tbl_users DONDE username = '$ user' O email = '$ email'"; $ usercheck = mysql_query ($ query_usercheck, $ speedycms) o die (mysql_error()); $ row_usercheck = mysql_fetch_assoc ($ usercheck); $ totalRows_usercheck = mysql_num_rows ($ usercheck); continuación if ($ totalRows_usercheck> 0) pantalla un mensaje de error para evitar los duplicados se agreguen lo contrario permiten insertar la base de datos – methuselah

+1

Una consulta es mejor que dos –

+0

Posiblemente. Admito que nunca lo había intentado de esa manera. –

Cuestiones relacionadas