Registro y login de usuarios con PHP y MySQL (II)

Creo que me retrasé mucho para continuar con este tutorial y es hora de retomarlo.
En el anterior episodio de este tutorial creamos la base de datos y la tabla necesaria para poder registrar usuarios. En este crearemos el formulario para que los usuarios rellenen con sus datos y haremos la conexión a la BD.

Comencemos con la parte del formulario en HTML (aunque el archivo tiene que tener la extensión .php):

<form method="post" action="">
    Nombre: <input type="text" name="nom" id="nom" /><br />
    Apellidos: <input type="text" name="ape" id="ape" /><br />
    Nick: <input type="text" name="nick" id="nick" /><br />
    Email: <input type="text" name="email" id="email" /><br />
    Contraseña: <input type="text" name="pswd" id="pswd" /><br />
    Repetir Contraseña: <input type="text" name="pswd2" id="pswd2" /><br />
    <input type="submit" name="crear" class="register" value="Crear Usuario" />
</form>

Hasta aquí el código para mostrar los imput del formulario. Empecemos con la parte PHP. Lo primero es poner un código en el action del formulario para decirle que la acción se encuentra en esta misma página (la página donde estamos escribiendo el código):

<form method="post" action="<?php $_SERVER['PHP_SELF']?>">

Tras esto empezamos a recibir los datos del formulario y comprobamos si son los adecuados:

    if(isset($_POST['crear'])) { // comprobamos que se han enviado los datos desde el formulario 
        // creamos una función que nos permita validar el email 
        function valida_email($correo) { 
            if (preg_match('/(\w+)@(\w+)\.\w\w\w?/',$correo)) return true; 
            else return false; 
        } 
        // Procedemos a comprobar que los campos del formulario no estén vacíos 
        $sin_espacios = count_chars($_POST['nick'], 1); 
        if(!empty($sin_espacios[32])) { // comprobamos que el campo nick no tenga espacios en blanco 
            echo "El campo <em>Nick</em> no debe contener espacios en blanco."; 
        }elseif(empty($_POST['nom'])) { // comprobamos que el campo nom no esté vacío 
            echo "No has ingresado tu usuario."; 
		}elseif(empty($_POST['ape'])) { // comprobamos que el campo ape no esté vacío 
            echo "No has ingresado tus apellidos."; 
        }elseif(empty($_POST['pswd'])) { // comprobamos que el campo pswd no esté vacío 
            echo "No haz ingresado contraseña."; 
        }elseif($_POST['pswd'] != $_POST['pswd2']) { // comprobamos que las contraseñas ingresadas coincidan 
            echo "Las contraseñas ingresadas no coinciden."; 
        }elseif(!valida_email($_POST['email'])) { // validamos que el email ingresado sea correcto 
            echo "El email ingresado no es válido."; 
        }else { 
            // "limpiamos" los campos del formulario de posibles códigos maliciosos 
            $nom = mysql_real_escape_string($_POST['nom']);
	    $ape = mysql_real_escape_string($_POST['ape']);
	    $nick = mysql_real_escape_string($_POST['nick']);
            $pswd = mysql_real_escape_string($_POST['pswd']);
	    $pswd2 = mysql_real_escape_string($_POST['pswd2']);
            $email = mysql_real_escape_string($_POST['email']);
            // comprobamos que el usuario ingresado no haya sido registrado antes 
            $sql = mysql_query("SELECT nick FROM users WHERE nick='".$nick."'");
            if(mysql_num_rows($sql) > 0) { 
                echo "El nick elegido ya ha sido registrado anteriormente."; 
            }else { 
                $pass = md5($pswd);
                // ingresamos los datos a la BD 
                $reg=mysql_query("INSERT INTO users (nom, ape, nick, pass, email) VALUES ('".$nom."', '".$ape."', '".$nick."', '".$pass."', '".$email."')"); 
                if($reg) { 
                    echo "Datos ingresados correctamente.";
                }else { 
                    echo "Ha ocurrido un error y no se registraron los datos."; 
                } 
            } 
        } 
    }else {

Las comprobaciones que haremos serán si email es correcto (mirar si tiene una @ por ejemplo), si el nick tiene espacios en blanco o si ya está en la base de datos y si alguno de los campos está vacío. El código completo quedará de esta forma:

<?php
    if(isset($_POST['crear'])) { // comprobamos que se han enviado los datos desde el formulario 
        // creamos una función que nos permita validar el email 
        function valida_email($correo) { 
            if (preg_match('/(\w+)@(\w+)\.\w\w\w?/',$correo)) return true; 
            else return false; 
        } 
        // Procedemos a comprobar que los campos del formulario no estén vacíos 
        $sin_espacios = count_chars($_POST['nick'], 1); 
        if(!empty($sin_espacios[32])) { // comprobamos que el campo nick no tenga espacios en blanco 
            echo "El campo <em>Nick</em> no debe contener espacios en blanco."; 
        }elseif(empty($_POST['nom'])) { // comprobamos que el campo nom no esté vacío 
            echo "No has ingresado tu usuario."; 
		}elseif(empty($_POST['ape'])) { // comprobamos que el campo ape no esté vacío 
            echo "No has ingresado tus apellidos."; 
        }elseif(empty($_POST['pswd'])) { // comprobamos que el campo pass no esté vacío 
            echo "No haz ingresado contraseña."; 
        }elseif($_POST['pswd'] != $_POST['pswd2']) { // comprobamos que las contraseñas ingresadas coincidan 
            echo "Las contraseñas ingresadas no coinciden."; 
        }elseif(!valida_email($_POST['email'])) { // validamos que el email ingresado sea correcto 
            echo "El email ingresado no es válido."; 
        }else { 
            // "limpiamos" los campos del formulario de posibles códigos maliciosos 
            $nom = mysql_real_escape_string($_POST['nom']);
	    $ape = mysql_real_escape_string($_POST['ape']);
	    $nick = mysql_real_escape_string($_POST['nick']);
            $pswd = mysql_real_escape_string($_POST['pswd']);
	    $pswd2 = mysql_real_escape_string($_POST['pswd2']);
            $email = mysql_real_escape_string($_POST['email']);
            // comprobamos que el usuario ingresado no haya sido registrado antes 
            $sql = mysql_query("SELECT nick FROM users WHERE nick='".$nick."'");
            if(mysql_num_rows($sql) > 0) { 
                echo "El nick elegido ya ha sido registrado anteriormente."; 
            }else { 
		// encriptamos la contraseña ingresada con md5
                $pass = md5($pswd);
                // ingresamos los datos a la BD 
                $reg=mysql_query("INSERT INTO users (nom, ape, nick, pass, email) VALUES ('".$nom."', '".$ape."', '".$nick."', '".$pass."', '".$email."')"); 
                if($reg) { 
                    echo "Datos ingresados correctamente.";
                }else { 
                    echo "Ha ocurrido un error y no se registraron los datos."; 
                } 
            } 
        } 
    }else { 
?>

<form method="post" action="<?php $_SERVER['PHP_SELF']?>">
    Nombre: <input type="text" name="nom" id="nom" /><br />
    Apellidos: <input type="text" name="ape" id="ape" /><br />
    Nick: <input type="text" name="nick" id="nick" /><br />
    Email: <input type="text" name="email" id="email" /><br />
    Contraseña: <input type="text" name="pswd" id="pswd" /><br />
    Repetir Contraseña: <input type="text" name="pswd2" id="pswd2" /><br />
    <input type="submit" name="crear" class="register" value="Crear Usuario" />
</form>

<?php
	}
?>

Como podéis ver el formulario queda en el medio, de esta forma nos ahorramos crear otro archivo solo para la validación y registro. Pero si lo preferís en dos archivos solo tenéis que cambiar el código en el action del formulario por la ruta donde guardéis el archivo PHP con las validaciones.

En el próximo episodio veremos el login de un usuario ya registrado. Cualquier duda o problema que encontréis no dudéis en comentarlo.

5 Comments

  1. javier
    dic 12, 2011 @ 02:00:37

    muy bueno tu aporte muchas gracias por compartir amigo éxitos sigue así xD

    Reply

    • rogeliorabbit
      dic 13, 2011 @ 02:00:15

      Espero sacar tiempo y seguir con el tutorial

      Reply

  2. javier
    dic 12, 2011 @ 02:57:37

    amigo donde pongo para conectar con la base de dato

    Reply

    • rogeliorabbit
      dic 12, 2011 @ 22:02:16

      Cierto, me salté esa parte. Sería así:

      // Host al que conectar, habitualmente es el ‘localhost’, usuario y contraseña
      $conexion = mysql_connect("localhost", "usuario", "clave");
      // Nombre de la Base de Datos que se desea utilizar
      mysql_select_db("demo", $conexion);

      Reply

  3. Registro y login de usuarios con PHP y MySQL (III) | blumbablog, por rubén díaz
    ene 04, 2012 @ 18:16:31

    [...] tiempo empecé una serie de tutoriales para crear un sistema de registro y login de usuarios (1 y 2) y creo que va siendo hora de continuar con [...]

    Reply

Leave a Reply

*