Foros del Web » Programando para Internet » PHP »

Usuarios no repetidos

Estas en el tema de Usuarios no repetidos en el foro de PHP en Foros del Web. Buenas; ¿Saben como puedo hacer para que al inscribirse un usuario nuevo en mi DB se haga una previa comprobación de que ese nombre de ...
  #1 (permalink)  
Antiguo 07/01/2003, 12:26
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Usuarios no repetidos

Buenas;

¿Saben como puedo hacer para que al inscribirse un usuario nuevo en mi DB se haga una previa comprobación de que ese nombre de usuario no está ya en la DB?

Gracias
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 07/01/2003, 12:31
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Código PHP:
<?
 $check 
mysql_query("SELECT id FROM tabla WHERE nombre='$nombre'");

if (
mysql_num_rows($check) > 0){
echo 
"Nombre en uso. Escoge otro.";
}
else {
$padentro mysql_query("INSERT INTO tabla (campos) VALUES (valores)");
}
?>
__________________
M a l d i t o F r i k i
  #3 (permalink)  
Antiguo 07/01/2003, 12:52
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
¿Qué puedo decir?... GRACIAS CAIN
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #4 (permalink)  
Antiguo 07/01/2003, 13:23
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 3 meses
Puntos: 0
si usas el campo usuario de tu base de datos como la clave primaria, el mismo mysql se encarga de que no se repitan.

Saludos
  #5 (permalink)  
Antiguo 07/01/2003, 14:57
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 3 meses
Puntos: 17
Pero si no haces ninguna comprobación, MySQL no reporta ningún error (simplemente no ingresa nada en la base de datos) y el usuario piensa que todo ha salido bien, cuando en realidad no es así.
__________________
M a l d i t o F r i k i
  #6 (permalink)  
Antiguo 07/01/2003, 15:03
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 3 meses
Puntos: 0
pues no, mysql no lo ingresa y dice el mensaje de error corespondiente por tanto hacer el mysql_query con un or die, bien dentro de un if, funciona muy bien, haz la prueba

Saludos
  #7 (permalink)  
Antiguo 07/01/2003, 15:10
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Con el metodo de chalito puedes usar mysql_errno() para saber el numero de error que se ha producido y saber asi si ha sido producido por meter una clave duplicada o ha sido otro error. La ventaja de este metodo es que consume menos recursos de BD y es mas rapido. Solo se ejecuta una consulta.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 07/01/2003, 15:20
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
MMMMMMM....

Y estan seguros que eso hara la comprobaciòn existente del usuario???
Código PHP:
<?
 $check 
mysql_query("SELECT id FROM tabla WHERE nombre='$nombre'");

if (
mysql_num_rows($check) > 0){
echo 
"Nombre en uso. Escoge otro.";
}
else {
$padentro mysql_query("INSERT INTO tabla (campos) VALUES (valores)");
}
?>
No es mejor sacarlo mediante la celda que existe, por medio de un LIKE????
  #9 (permalink)  
Antiguo 07/01/2003, 15:29
Avatar de chalito  
Fecha de Ingreso: diciembre-2002
Ubicación: Santiago, chile
Mensajes: 221
Antigüedad: 21 años, 3 meses
Puntos: 0
es mejor el = puesto que el LIKE esta hecho para preguntar por ejemplo si el texto esta contenido almenos en parte, osea, podria haber un usuario llamado usuario y preguntas con un LIKE us% y tomaria a usuario como correcto, puede llevar a errores.

Saludos
  #10 (permalink)  
Antiguo 07/01/2003, 16:37
Avatar de BVis  
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona
Mensajes: 104
Antigüedad: 21 años, 5 meses
Puntos: 0
Ideal:

Definir el campo que no puede tener duplicados como UNICO, a la hora de crear la tabla.

despues sencillamente:

Código PHP:
mysql_query($consulta) or die("Nick Usado"); 
Una solución que no he provado pero que puede ser útil:

Código PHP:
mysql_query($consulta) or header("Location: ".$_SERVER['PHP_REFERER']."?error_de_mysql=".mysql_error()); 
Hombre, el 'error_de_mysql' lo tienes que manejar en el script $_SERVER['PHP_REFERER'], pero te ahorra trabajo y es una manera óptima de trabajar.

1 Saludo.
__________________
"Yo opino lo mismo que BVis, el de 'forosdelweb' " - Bill Gates
  #11 (permalink)  
Antiguo 07/01/2003, 20:47
Avatar de lado2mx
Colaborador
 
Fecha de Ingreso: agosto-2001
Ubicación: Veracruz
Mensajes: 3.720
Antigüedad: 22 años, 8 meses
Puntos: 9
ahora ya lo entendi, creo que me servira bastante, ya que estuve usando LIKE en mi sistema de usuarios.

Pero como estoy viendo los errores de mysql, en el manual de PHP, servira bastante esto

Salu2
  #12 (permalink)  
Antiguo 08/01/2003, 02:55
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Ok, yo como en estos momentos me urge mucho acabar la página opté por el método de Cain, y por ello me surge otra duda con ese código, que a continuación y con el permiso de Cain, reescribo a modo de referencia:

Código PHP:
<?
 $check 
mysql_query("SELECT id FROM tabla WHERE nombre='$nombre'");

if (
mysql_num_rows($check) > 0){
echo 
"Nombre en uso. Escoge otro.";
}
else {
$padentro mysql_query("INSERT INTO tabla (campos) VALUES (valores)");
}
?>
Pues bien, lo que yo he echo es duplicarlo para que también verifique que no hay ningún DNI duplicado (por si acaso se da de alta algún tramposo),de este modo:

Código PHP:
$check mysql_query("SELECT * FROM USUARIOS WHERE usuario='$usuario'");
  
$check_DNI mysql_query("SELECT * FROM USUARIOS WHERE DNI='$dni'");
if (
mysql_num_rows($check) > 0){
echo 
"Usuario en uso. Por favor escoge otro.";
}
elseif (
mysql_num_rows($check_DNI) > 0){
echo 
"DNI no válido";
}
else {
$padentro mysql_query("insert into USUARIOS (usuario,pass,DEPORTE,FECHA,TARIFA,NOMBRE,APELLIDOS,DNI,DIRECCION,CP,TELEFONO,MOVIL,EMAIL) values ('$usuario','$pass','$deporte','$fecha','$tarifa','$nombre','$apellidos','$dni','$direccion','$cp','$tlfparticular','$tlfmovil','$email')",$link) or die(mysql_error());; 
Y sé que esto ralentiza la busqueda mucho ya que tiene que hacer dos rastreos en vez de uno sólo.

¿Y bien, hay algun método para simplificar la búsqueda?

GRACIAS
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #13 (permalink)  
Antiguo 08/01/2003, 05:59
Avatar de dabogar  
Fecha de Ingreso: diciembre-2002
Ubicación: Valenciaaaa es la tierra de las flores ...
Mensajes: 33
Antigüedad: 21 años, 4 meses
Puntos: 0
Cambia las 2 consultas SQL :

Código PHP:
$check mysql_query("SELECT * FROM USUARIOS WHERE usuario='$usuario'");
 
$check_DNI mysql_query("SELECT * FROM USUARIOS WHERE DNI='$dni'"); 
Por una sola que sea:

Código PHP:
$check mysql_query("SELECT usuarios.nombre, usuarios.dni FROM USUARIOS WHERE usuario='$usuario'" OR DNI='$dni'); 
Asi compruebas ambas condiciones en la misma consulta ...

Saludos

Última edición por dabogar; 08/01/2003 a las 06:03
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 11:41.