Foros del Web » Programando para Internet » PHP »

registrando usuarios en mysql

Estas en el tema de registrando usuarios en mysql en el foro de PHP en Foros del Web. Hola, pues tengo el siguiente código PHP, que se conecta a la BD, comprueba si el usuario indicado no existe y en ese caso lo ...
  #1 (permalink)  
Antiguo 05/08/2008, 04:44
 
Fecha de Ingreso: enero-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
registrando usuarios en mysql

Hola, pues tengo el siguiente código PHP, que se conecta a la BD, comprueba si el usuario indicado no existe y en ese caso lo da de alta en la BD y en una tabla propia. El caso es que la consulta donde compruebo que el usuario no exista, siempre da como resultado una fila (Como si el usuario ya estuviera registrado) y encima entra en el código del else mostrando ese mensaje y registrando al usuario en la BD.

La tabla db_discos.usuarios la he creado yo para ir almacenando los usuarios.

Código:
<?PHP
	// Se obtienen los parámetros de conexión enviados desde el POST
	$name = $_POST['taname'];
	$pass = $_POST['tapass'];
	// Conectamos como el usuario que tiene permisos para crear otros usuarios
	$con = mysql_connect ("localhost", "root", "root");
	
	if ($con){ 
		mysql_select_db ("db_discos", $con);	
		// Si hemos conectado correctamente, comprobamos que el usuario no exista en la BD
		$res = mysql_query ("SELECT * FROM db_discos.usuarios WHERE nombre='$name'", $con);
		$num = mysql_num_rows ($res);
		if ($num==1){ // Se ha encontrado al menos un usuario con el mismo nombre
			echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">El usuario de nombre $name ya se encuentra registrado en el sistema.<br>Reg&iacute;strese con otro nombre.<br>En 5 segundos volver&aacute; a la p&aacute;gina de entrada. RESULTADO: $num</font></div></body></html>";		
		}
		else{ // En este caso no se encontraron usuarios con el mismo nombre. Lanzamos la secuencia para dar de alta
			mysql_query ("GRANT SELECT, INSERT, UPDATE ON db_discos.discos TO $name IDENTIFIED BY '$pass'", $con);
			mysql_query ("INSERT INTO usuarios (nombre, password) VALUES ('$name', '$pass')", $con);
			echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">Registro completado satisfactoriamente ($name, $pass).<br>Ahora puede usar su nombre y contraseña para acceder.</font></div></body></html>";
		}
	}
	else{ // En este caso no hemos conseguido conectar
		echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">Lo sentimos, no se ha podido conectar con la BD.<BR>Reint&eacute;ntelo de nuevo en unos minutos.<br>En 5 segundos volver&aacute; a la p&aacute;gina de entrada.</font></div></body></html>";
	}
	mysql_close ($con);
?>
¿Qué puede ir mal? He dado mil vueltas al código y no me percato de nada.
  #2 (permalink)  
Antiguo 05/08/2008, 06:03
Avatar de Mort20  
Fecha de Ingreso: junio-2008
Ubicación: Roca Casterly
Mensajes: 141
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: registrando usuarios en mysql

Yo diría que el problema es que una fila como "Empty set" contabiliza como tal, y por lo tanto te entra en el else.

Prueba esto:
Código PHP:
<?PHP
    
// Se obtienen los parámetros de conexión enviados desde el POST
    
$name $_POST['taname'];
    
$pass $_POST['tapass'];
    
// Conectamos como el usuario que tiene permisos para crear otros usuarios
    
$con mysql_connect ("localhost""root""root");
    
    if (
$con){ 
        
mysql_select_db ("db_discos"$con);    
        
// Si hemos conectado correctamente, comprobamos que el usuario no exista en la BD
        
$res mysql_query ("SELECT nombre FROM db_discos.usuarios WHERE nombre='$name' LIMIT 1"$con);
        
$row mysql_fetch_assoc($res);
        if (!empty(
$row['nombre'])){ // Se ha encontrado al menos un usuario con el mismo nombre
            
echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">El usuario de nombre $name ya se encuentra registrado en el sistema.<br>Reg&iacute;strese con otro nombre.<br>En 5 segundos volver&aacute; a la p&aacute;gina de entrada. RESULTADO: $num</font></div></body></html>";        
        }
        else{ 
// En este caso no se encontraron usuarios con el mismo nombre. Lanzamos la secuencia para dar de alta
            
mysql_query ("GRANT SELECT, INSERT, UPDATE ON db_discos.discos TO $name IDENTIFIED BY '$pass'"$con);
            
mysql_query ("INSERT INTO usuarios (nombre, password) VALUES ('$name', '$pass')"$con);
            echo 
"<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">Registro completado satisfactoriamente ($name, $pass).<br>Ahora puede usar su nombre y contraseña para acceder.</font></div></body></html>";
        }
    }
    else{ 
// En este caso no hemos conseguido conectar
        
echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">Lo sentimos, no se ha podido conectar con la BD.<BR>Reint&eacute;ntelo de nuevo en unos minutos.<br>En 5 segundos volver&aacute; a la p&aacute;gina de entrada.</font></div></body></html>";
    }
    
mysql_close ($con);
?>
__________________
Un Lannister siempre cumple sus promesas
  #3 (permalink)  
Antiguo 05/08/2008, 07:13
 
Fecha de Ingreso: enero-2008
Mensajes: 17
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: registrando usuarios en mysql

Gracias por la respuesta, Mort. He probado como dices, pero sigue sin funcionar. Por si sirve de algo, comentando las líneas encargadas de insertar al usuario, todo funciona correctamente (Obviamente, el usuario no se da de alta en la BD, sólo se muestra el mensaje que corresponde):

Código PHP:
else{ // En este caso no se encontraron usuarios con el mismo nombre. Lanzamos la secuencia para dar de alta
            //mysql_query ("GRANT SELECT, INSERT, UPDATE ON db_discos.discos TO $name IDENTIFIED BY '$pass'", $con);
            //mysql_query ("INSERT INTO usuarios (nombre, password) VALUES ('$name', '$pass')", $con);
            
echo "<html><head><meta http-equiv=\"refresh\" content=\"5; url=entrada.html\"></head><body><div align=\"center\"><font face=\"Courier New\">Registro completado satisfactoriamente ($name, $pass).<br>Ahora puede usar su nombre y contraseña para acceder.</font></div></body></html>";
        } 
Es decir, ahora si ingreso un usuario que no existe, sale el mensaje del if y no entra en el else.
El problema parece que es como si se ejecutaran primero las sentencias "mysql_query" del else y luego pasara a hacer el SELECT.
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 21:58.