Foros del Web » Programando para Internet » PHP »

Impedir Registros Iguales en MySQL

Estas en el tema de Impedir Registros Iguales en MySQL en el foro de PHP en Foros del Web. Saludos colegas, bien... como comente anteriormente en alguna otra ocacion, estoy con el proyecto de un foro... y bueno, ya se registran los usuarios y ...
  #1 (permalink)  
Antiguo 05/05/2004, 22:34
Avatar de antihem  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 227
Antigüedad: 19 años, 10 meses
Puntos: 0
Información Impedir Registros Iguales en MySQL

Saludos colegas,
bien... como comente anteriormente en alguna otra ocacion, estoy con el proyecto de un foro... y bueno, ya se registran los usuarios y toda la cosa, pero ahora el "pero" es que no se como hacer para que al registrar los usuarios no acepte los repetidos...
en la tabla, eh puesto el campo "alias" como llave primaria, para q no acepte duplas, hay algun codigo o algo que hacer para evitar duplas? Gracias.
__________________
- -
:neurotico eso fue un php warning ?
creo q si... :golpeado:
  #2 (permalink)  
Antiguo 05/05/2004, 23:10
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 7 meses
Puntos: 9
sencillo de ahí haces un chequeo con una consulta normal, y hacer un simple chequeo, si la consulta existe con el alias correcto, es obvio que puedes poner ahí un mensaje diciendo que el usuario existe, en caso contrario, ya lo insertas en la base de datos.
  #3 (permalink)  
Antiguo 06/05/2004, 06:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Lo normal es hacer tu consulta SQL bajo esa condición para ver si existe o no ese registro (tal como comenta lado2mx) ..

Pero si quieres controlar ese tema desde SQL .. usa campos con propiedad UNIQUE .. Eso probocará un error de SQL (que puedes controlar .. pero más fino sería la otra solución) ante un registro exactamente igual que pretendas duplicar.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 07/05/2004, 14:18
Avatar de antihem  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 227
Antigüedad: 19 años, 10 meses
Puntos: 0
Ya hice el chequeo normal en MySQL, compare variables y bien.. funciono! ^__^ GRacias a Ambos!!
__________________
- -
:neurotico eso fue un php warning ?
creo q si... :golpeado:
  #5 (permalink)  
Antiguo 11/05/2004, 18:10
 
Fecha de Ingreso: mayo-2004
Ubicación: Madris!
Mensajes: 31
Antigüedad: 19 años, 10 meses
Puntos: 0
Una forma de controlar el error q devuleve MySQL al intentar insertar campos duplicados en un campo UNIQUE puede ser lo siguiente.

$peticion="INSERT INTO nombreTabla (campo1,campo2,campo3,etc) VALUES ('valor1"','valor','valor',etc)";
$resultado=@mysql_query($peticion, $conexionBaseDatos); // or die();

if(mysql_errno()==1062)
echo "No se puede introducir los datos!";

Ta luegu!
  #6 (permalink)  
Antiguo 12/05/2004, 04:09
Avatar de vitxo  
Fecha de Ingreso: septiembre-2003
Ubicación: Valencia
Mensajes: 219
Antigüedad: 20 años, 6 meses
Puntos: 0
Si no me equivoco, la clave primaria de una tupla no sólo asegura que una fila de una tabla o relación es identificable de forma unívoca, sino también asegura que sea única.
Aunque es correcto añadir restricciones, como las que te mandan aquí arriba.
  #7 (permalink)  
Antiguo 12/05/2004, 06:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
mm .. a nivel de control de errores .. mysql_query() ante un registro duplicado (que se use UNIQUE) probocará un error (de hecho con @ se está "silenciando" dicho error) y en el ejemplo que pusieron se obtine el código de error concreto para dar el mensaje de error en consecuencia ..

Pero .. la pregunta sería: ¿ PHP generá en sus log de errores (si están activados) los errores de mysql_query() cada vez que un registro se intent "duplicar"? ..

Si es así .. creo que sería mejor hacer la consulta tipica (SELECT) por ese registro/campo en lugar de controlar el error arrojado (por lo menos para este caso concreto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 12/05/2004, 09:11
Avatar de Phobos  
Fecha de Ingreso: abril-2001
Ubicación: sentado frente a un pc prestado
Mensajes: 375
Antigüedad: 22 años, 11 meses
Puntos: 2
Pero no seria mas rapido que el motor de MySql entregue el error que recorrer toda la tabla buscando si el registro existe???

saludos
  #9 (permalink)  
Antiguo 12/05/2004, 10:24
 
Fecha de Ingreso: octubre-2003
Ubicación: BolivianitA
Mensajes: 235
Antigüedad: 20 años, 5 meses
Puntos: 0
saludos chicos

Al momento de llenar el formulario los usuarios hacen 2 clicks y por eso es que se almacenan en forma doble.

A lo que entendi por lo que menciona cluster seria :

1.Crearse un procedimiento de verificación.

2. Realizar una busqueda de los datos "SELECT"

3. Verificar si los datos que estamos por insertar existen en nuestra base de datos "WHERE".

4. Si existen estos datos retornar una variable cualquiera con un valor por decir sw=1;

5. Si No existe estos datos retornar una variable cualquiera con un valor por decir sw=0;

En tu programa principal solo hay que llamar al procedimiento y verficar antes de almacenar los datos

saludos
__________________
rocita
  #10 (permalink)  
Antiguo 13/05/2004, 06:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Mensaje Original por Phobos
Pero no seria mas rapido que el motor de MySql entregue el error que recorrer toda la tabla buscando si el registro existe???

saludos
mm Tal vez ...

Pero optimizando las consultas SQL por ejemplo (en Msyql) usando COUNT() para ver cuantos registros tienes bajo esa condición (WHERE ..) será más rápido (y menos consumo de recursos) que por ejemplo aplicar un mysql_num_rows() ...

Lo que no he probado a ver es como andará el tema de los "log's" de errores de PHP si usas la técnica del control del "error".

Un saludo,
  #11 (permalink)  
Antiguo 03/01/2005, 10:26
 
Fecha de Ingreso: mayo-2004
Mensajes: 400
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola, yo no se mucho de php y me gustaria saber como puedo hacer antes la consulta del registro, para que no los duplique, el insert que utilizo es este

Código PHP:
 mysql_query("INSERT INTO ".C_MYSQL_MEMBERS." VALUES ('','".$fname."','".$lname."','".$pass."',
      '"
.$year."-".$month."-".$day."','".$gender."',
      '"
.$purpose."','".$country."','".$email."','".$url."',
      '"
.$icq."','".$aim."','".$phone."','".$city."','".$marstat."','".$child."','".$height."','".$weight."','".$hcolor."','".$ecolor."','".$etnicity."','".$religion."','".$smoke."','".$drink."','".$education."','".$job."','".$hobby."','".$descr."','".$pideal."','".$sgender."','".$setnicity."','".$sreligion."','".$agef."','".$aget."','".$heightf."','".$heightt."','".$weightf."','".$weightt."','".$hdyfu."','".$picture[0]."','".$picture[1]."','".$picture[2]."','".horo($month$day)."',NOW(''),NOW(''),INET_ATON('".ip()."'),'".$cst."','0')") or die(mysql_error());

    
$last_id mysql_fetch_array(mysql_query("SELECT LAST_INSERT_ID() AS last_id"));
    
$last_id $last_id['last_id']; 
como tengo que hacer la busqueda del registro antes?
un saludo
  #12 (permalink)  
Antiguo 03/01/2005, 10:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Pues haces un SELECT a esa tabla C_MYSQL_MEMBERS usando COUNT() para contar los registro que te va arrojar tu consulta bajo la condición (WHERE) que definas .. No comentas que campo de esa tabla (columna) es el "único" .. o combinación de vários campos o incluso ¿todos? ...

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:58.