Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Problemas con las comprobaciones previas al registro de usuarios

Estas en el tema de Problemas con las comprobaciones previas al registro de usuarios en el foro de PHP en Foros del Web. Buenos dias gente, Mirad, estoy creando mi primer registro de usuarios y hasta el momento me funcionaba bien. Hace poco decidi incorporar más comprobaciones y ...
  #1 (permalink)  
Antiguo 24/05/2011, 04:06
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Pregunta Problemas con las comprobaciones previas al registro de usuarios

Buenos dias gente,

Mirad, estoy creando mi primer registro de usuarios y hasta el momento me funcionaba bien. Hace poco decidi incorporar más comprobaciones y no las cumple.
Sé que el fallo es que o no escribo la instrucción correcta o que la escribo bien y no donde deberia jejeje.

El codigo es el siguiente:
Código PHP:
Ver original
  1. <?
  2. include('config.php');
  3. ?>
  4. <!--incluimos el config.php que contiene los datos de la conexión a la db-->
  5. <HTML>
  6. <HEAD><TITLE>Registre</TITLE>
  7. </HEAD>
  8. <BODY>
  9. <?php
  10.  
  11. $user = $_POST['nick'];
  12. $user = mysql_real_escape_string($user); //Como la vas a ingresar a mysql es mejor escapar la variable
  13.  
  14. $pass = $_POST['pass'];
  15. $pass = mysql_real_escape_string($pass);
  16.  
  17. $pass1 = $_POST['pass1'];
  18. $pass1 = mysql_real_escape_string($pass1);
  19.  
  20. $email = $_POST['email'];
  21. $email = mysql_real_escape_string($email);
  22.  
  23. $fecha = date("Y/m/d");
  24. $fecha = mysql_real_escape_string($fecha);
  25.  
  26. if (!empty($_POST['level']))
  27. {
  28.    $level = $_POST['level'];
  29.    $level = mysql_real_escape_string($level);
  30. }
  31. else
  32. {
  33. $level = 2; //valor por defecto si $_POST no tiene asignado ningun valor a level
  34. }
  35. $rollo = $_POST['rollo'];
  36. $rollo = mysql_real_escape_string($rollo);
  37.  
  38. if(empty($_POST['nick']) || empty($_POST['pass']) || empty($_POST['pass1']) || empty($_POST['email']))
  39.    {
  40. Header("Location: reg.php"); //enviamos al form de registro que esta en reg.php
  41.    }
  42.    else
  43.    {
  44.  
  45.       //Comprobamos que la pass y pass1 son iguales, sino, volvemos a reg.php
  46.       if($_POST['pass'] != $_POST['pass1'])
  47.       {
  48.       Header("Location: reg.php");  //Como deberia hacerlo para que me saliera al lado del formulario en vez de volver a ir are.g
  49.       echo 'Las passwords no son iguales';
  50.       }
  51.       else
  52.       {
  53.          //comprobamos que el usuario no existe en la db
  54.          $usuarios=mysql_query("SELECT nick FROM users WHERE nick='$user' ");
  55.  
  56.          if($user_ok=mysql_fetch_array($usuarios))
  57.          {
  58.          echo 'El usuario ya esta registrado';
  59.          mysql_free_result($usuarios); //liberamos la memoria del query a la db
  60.          }
  61.          else
  62.          {
  63.            
  64.             $level = "2"; //usaremos level 1 para admins, level 2 para los demas (se cambia manualmente desde phpmyadmin)
  65.  
  66.          
  67.                if (mysql_query("INSERT INTO users (nick,pass,pass1,email,fecha,level,rollo) values ('" .$user . "','" .$pass . "','" .$pass1 . "','" .$email . "','" .$fecha . "','" .$level . "','" .$rollo . "') "))
  68.                {
  69.                echo 'Usuario registrado';
  70.                }
  71.                else
  72.                {
  73.                   echo 'Ocurrió un error, MySQL ha dicho: '.mysql_error();
  74.                }
  75.          }
  76.  
  77.       }
  78.    }
  79.  
  80.  
  81.  
  82. ?>
  83.  
  84.            
  85. </BODY>
  86. </HTML>

Confieso que al utilizar tanto if me he confundido algo pero bueno, estoy aprendiendo jeje. La cosa es que aparte de comprobar que los campos no esten vacios y de que el usuario no se repita, me gustaria añadir lo mismo para el email: que comprobara que no se repita. Si lo sé, deberia hacer algo similar que en el usuario, pero el caso es que me he quedado estancado y no consigo hacerlo funcionar.

Como deberia solucionarlo y que código utilizariais y sobretodo, dónde?

Saludos :)
  #2 (permalink)  
Antiguo 24/05/2011, 05:39
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

buenas,
si lo que deseas es que no exista el email solamente en la BD a parte del usuario:
Código PHP:
$usuarios=mysql_query("SELECT nick FROM users WHERE nick='$user' ");
     
             if(
mysql_num_rows($usuarios)>0)
             {
             echo 
'El usuario ya esta registrado';
             
mysql_free_result($usuarios); //liberamos la memoria del query a la db
             
}
else
{
$email=mysql_query("SELECT email FROM users WHERE email='$email' ");
     
             if(
mysql_num_rows($email)>0)
             {
             echo 
'El email ya esta registrado';
             
mysql_free_result($email); //liberamos la memoria del query a la db
             
}
         else
         {
     
/* Todo lo demas que tienes*/
         
}

saludos
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..

Última edición por rodno; 24/05/2011 a las 05:54
  #3 (permalink)  
Antiguo 24/05/2011, 08:29
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Perfecto! Muchisimas grácias Rodno, ya me funciona.

Disculpa mi ignorancia de principiante jejeje pero no acabo de entender la funcionalidad de la instrucción: mysql_num_rows($usuarios)>0, diciendole:">0" que le decimos exactamente?Qué diferencia hay con mysql_fetch_array?

Sorry por las preguntas tontas jeje :)
  #4 (permalink)  
Antiguo 24/05/2011, 08:31
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 9 meses
Puntos: 128
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Son completamente diferentes, mysql_num_rows solo cuenta el resultado de la consulta, mientras que con mysql_fetch_array recorres y obtienes el resultado de la consulta para posteriormente mostrarlo, inbsertarlo en otro lado ó lo que estimes conveniente
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #5 (permalink)  
Antiguo 24/05/2011, 08:54
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Hola,
que bueno que hayas resuelto y la explicacion es
como dice bUllan9ebrio

saludos
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #6 (permalink)  
Antiguo 24/05/2011, 08:56
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Thx a todos!

Aunque ahora revisando mi código he observado que cumple con todas las comprobaciones que le he presentado menos con una:

Al añadir un usuario no hay ningun problema, pero al añadir un usuario formado por espacios en blanco sin ningun caracter tampoco lo hay. Crei haberlo solucionado con un empty() pero se ve que no jeje. Supongo que es de principiante pero ¿cómo hago para que no añada ningun registro formado por caracteres en blanco?

Saludos :D
  #7 (permalink)  
Antiguo 24/05/2011, 09:03
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 9 meses
Puntos: 128
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

podrias hacerlo con la funcion trim() para quitar todos los espacios en blanco y luego realizar la comprobacion de que el campo no este vacío
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #8 (permalink)  
Antiguo 24/05/2011, 11:28
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Que buena idea has tenido bUllan9ebrio. Definitivamente ya esta jijiji :P

Funciona bien y ya no hay ningun fallo. Lo codifique de la siguiente manera:
Código PHP:
Ver original
  1. $user = $_POST['nick'];
  2. $user = mysql_real_escape_string($user);
  3. $user_noespais=trim($user); //Como la vas a ingresar a mysql es mejor escapar la variable
  4.  
  5. $pass = $_POST['pass'];
  6. $pass = mysql_real_escape_string($pass);
  7. $pass_noespais=trim($pass);
  8.  
  9. $pass1 = $_POST['pass1'];
  10. $pass1 = mysql_real_escape_string($pass1);
  11. $pass1_noespais=trim($pass1);
  12.  
  13. $email = $_POST['email'];
  14. $email = mysql_real_escape_string($email);
  15. $email_noespais=trim($email);
  16.  
  17. $fecha = date("Y/m/d");
  18. $fecha = mysql_real_escape_string($fecha);
  19.  
  20. if (!empty($_POST['level']))
  21. {
  22.    $level = $_POST['level'];
  23.    $level = mysql_real_escape_string($level);
  24.    $level_noespais=trim($level);
  25. }
  26. else
  27. {
  28. $level = 2; //valor por defecto si $_POST no tiene asignado ningun valor a level
  29. }
  30. $rollo = $_POST['rollo'];
  31. $rollo = mysql_real_escape_string($rollo);

Puse la instrucción trim() debajo de cada campo. Es correcto hacerlo asi o deberia de haberlo echo en otra parte?

Qué más comprobaciones podria añadir al registro según vuestra experiéncia??

Saludos.
  #9 (permalink)  
Antiguo 24/05/2011, 12:32
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Buenas de nuevo jeje,

Resulta que si que queda 1 fallo por corregir. Resulta que todo marcha bien pero cuando llega el momento de introducir un email, escriba lo que escriba, en la base de datos me sale: Resource id #6 en vez de el correo que habia introducido.

Que significa esto? Que modificaciones tengo que realizar?

Saludos.
  #10 (permalink)  
Antiguo 24/05/2011, 12:58
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 9 meses
Puntos: 128
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Realiza un echo al correo y nos cuentas como te va

Código PHP:
Ver original
  1. $email = $_POST['email'];
  2. echo "correo antes : $email <br>";
  3. $email = mysql_real_escape_string($email);
  4. $email_noespais=trim($email);
  5.  
  6. echo "correo despues : $email_noespais";

Tal vez trim te este jugando una mala pasada
__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #11 (permalink)  
Antiguo 25/05/2011, 02:17
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Hice el echo al correo, me mostro el mismo resultado para el "antes" y el "despues". El resultado que obtuve fue:
correo antes : esto es una [email protected]
correo despues : esto es una [email protected]


No entiendo por que me pasa esto solo en el email cuando las demas tambien les añadi el trim(). Alguna idea?

Saludos :)
  #12 (permalink)  
Antiguo 25/05/2011, 11:22
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

hola, prueba de esta forma

str_replace(" ","","esto es una [email protected]");
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..
  #13 (permalink)  
Antiguo 26/05/2011, 02:50
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Buenos dias,

He probado con tu idea rodno y tampoco me hace caso.

Código PHP:
Ver original
  1. $email = $_POST['email'];
  2. $email = mysql_real_escape_string($email);
  3. $email_noespais=trim($email);
  4. str_replace(" ","",$email);

Haga lo que haga siempre me muestra el Resource id #6. He probado tanto con el trim, como con el str_replace, como con los dos a la vez y a la hora de realizar el registro obtengo el mismo resultado.

Haber si entre todos conseguimos resolver esto :)

Saludos
  #14 (permalink)  
Antiguo 26/05/2011, 03:10
 
Fecha de Ingreso: febrero-2010
Mensajes: 295
Antigüedad: 14 años, 9 meses
Puntos: 58
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Hola sven_uri.

La función que uso yo para validar emails es la siguiente:

Código PHP:
function verifica_email($email){        
    
$reg="^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.([a-zA-Z]{2,6})$";
    return (
ereg($reg$email));

Me funciona muy bien. Mira a ver si la puedes usar en tu código de alguna forma.
  #15 (permalink)  
Antiguo 26/05/2011, 06:04
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Buenas Nexus 10,

Alguna vez he utilizado algo tipo lo que me comentas, pero mucho más sencillo. Podrias explicarme el:
Código PHP:
Ver original
  1. $reg="^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.([a-zA-Z]{2,6})$";

Se me escapan cosas como el "^" al principio del claudator, el "\" del 2ndo parentesis ... Sé que es una tonteria pero, me iria muy bien comprender cada tramo del $reg.

Tu propuesta, tiene en cuenta los espacios en blanco?

Muchas grácias :)
  #16 (permalink)  
Antiguo 26/05/2011, 06:20
Avatar de rodno  
Fecha de Ingreso: enero-2009
Ubicación: En algun lugar de Cuba
Mensajes: 426
Antigüedad: 15 años, 9 meses
Puntos: 43
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

hola sven_uri,
la solucion que te di
str_replace(" ","",$email); tienes que asignarlo a alguna variable, o simplemente mostrarla, ella no modifica la el $email, el retorna un valor aparte
seria algo asi:

$email = $_POST['email'];
$email = mysql_real_escape_string($email);
$email_noespais=trim($email);
$email_sin_espacios= str_replace(" ","",$email);
echo $email_sin_espacios;

saludos y vuelva a probar
__________________
"No te preocupes si no funciona bien. Si todo lo hiciera, no tendrías trabajo."
"El problema no es no saber, sino no saber quién sabe"
..::Con Karma se piensa mejor::..

Última edición por rodno; 26/05/2011 a las 06:43
  #17 (permalink)  
Antiguo 26/05/2011, 11:51
Avatar de sven_uri  
Fecha de Ingreso: mayo-2011
Mensajes: 109
Antigüedad: 13 años, 6 meses
Puntos: 4
Respuesta: Problemas con las comprobaciones previas al registro de usuarios

Jejeje thx rodno, ahora si que cumple con su función el str_replace. Almenos con el echo. Sé que es muy de novato pero que código tenias en mente cuando me decias que lo asignara a alguna variable??

Supongo que no basta con:

Código PHP:
Ver original
  1. $email = $_POST['email'];
  2. $email = mysql_real_escape_string($email);
  3. $email_noespais=trim($email);
  4. $email_sin_espacios= str_replace(" ","",$email);

Porque sigue mostrando el Resource id #6. Estoy aprendiendo un muchisimo de mis fallos grácias a vosotros, os estoy muy agradecido.

Saludos.

Etiquetas: registro, usuarios
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:03.