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&#91;'PHP_SELF'&#93;?>">

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&#91;'crear'&#93;)) { // 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&#91;'nick'&#93;, 1); 
        if(!empty($sin_espacios&#91;32&#93;)) { // 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&#91;'PHP_SELF'&#93;?>">
    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.

Autor: rogeliorabbit

Administrador de Servidores y Páginas Web actualmente sin trabajo. Me interesa la programación, PHP, diseño web, WordPress, Android … Puedes encontrarme en Google+ o en Twitter

8 opiniones en “Registro y login de usuarios con PHP y MySQL (II)”

    1. 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);

  1. Buenas tardes, estuve probando la pagina que diseñaste y me sucede lo siguiente:

    Al ejecutar la pagina desde firefox con el sistema operativo Windows usando wampserver aparecen estos mensajes en la pagina:
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\wamp\www\lenguaje_de_programacion_II\registro_y_login_de_usuario\index.php on line 43
    Ha ocurrido un error y no se registraron los datos.

    En la linea(43) que menciona tengo escrito:
    if(mysql_num_rows($sql) > 0) {

    Por ende no se crean los usuarios, ¿a que se debe esto?

  2. Estimado Rogelio, estuve leyendo y tus codigos me parecen muy buenos, pero tal como dice el amigo Engerbert, en un inicio me salia el error que hace mencion, lo que hice fue que en donde colocas ” $sql = mysql_query(“SELECT nick FROM users WHERE nick='”.$nick.”‘”);
    if(mysql_num_rows($sql) > 0)”, se debe dar la ruta de la tabla creada en Mysql, en este casi tu tabla se llama USERS, por otro lado aun asi a mi no me permite pues las variables globales las tengo desactivadas por lo que no puede generar registros, por ende no lee “, me podrias ayudar a solucionar este problema, he intentado activarlo, modificando el archivo .htaccess copiando la linea php_flag register_globals on, pero aun asi no registra, me ayudas por favor, quisas las versiones anteriores del PHP se encuentran desactivadas, que php utilizaste?

Deja un comentario

Loading Facebook Comments ...
Loading Disqus Comments ...

No Trackbacks.