PHP

Ξ 82 comentarios

Cómo hacer un registro de usuarios en PHP

por Xabadu
Cómo hacer un registro de usuarios en PHP

Continuando con nuestros tutoriales de Diseño Web, y ya habiendo aprendido a hacer autentificaciones de usuarios mediante el uso de PHP con y sin bases de datos, hoy les traemos otro sencillo tutorial en el cual les enseñaremos a añadir un registro de usuarios a sus sitios Web, el cual puede resultar muy útil si queremos entregar ciertas funcionalidades a algunos tipos de usuarios.

Para este tutorial, no es necesario tener grandes conocimientos de lenguajes dinámicos ni manipulación de bases de datos, ya que veremos todo el código correspondiente en detalle.

Como siempre, más información después del salto.

Cómo hacer un registro de usuarios en PHP

Como siempre, partamos por lo primero:

Implementos necesarios:

  • Un editor Web. Para este caso utilizaremos Adobe Dreamweaver CS3 (Pueden descargar una versión de evaluación aquí).
  • Un servidor que soporte y ejecute archivos PHP. Para esto tienen 2 opciones: Pueden instalar algún software que contenga un servidor estilo Apache (Como Wamp o Xampp) o buscar algún alojamiento gratis que ofrezca la funcionalidad.
  • Un sistema de bases de datos. Para este caso utilizaremos MySQL, el cual pueden instalarlo (viene incluido en Wamp y Xampp) o buscar algún alojamiento gratis que ofrezca la funcionalidad.

Sin más cosas, manos a la obra:

Procedimiento:

1.- Lo primero que haremos, será crear la tabla correspondiente a los usuarios en nuestra base de datos. Si no saben como hacerla, pueden ver este tutorial en el que hemos realizado este proceso paso a paso. La tabla para este ejemplo contendrá los siguientes campos:

  1. username ===> varchar (10) ===> primary key
  2. clave ===> varchar(10)
  3. email ===> varchar(30)
  4. nombre ===> varchar(50)

Eventualmente pueden definir los campos que Uds. estimen convenientes (por ejemplo Sitio Web, Pais de ubicación, etc), dependiendo de la información que quieran recolectar de cada usuario.

2.- A continuación comenzaremos con el diseño de nuestro registro de usuarios. Primero que todo, crearemos una página HTML donde tendremos nuestro formulario de registro. A esta página la llamaremos “registro.html” y en ella crearemos el formulario. Si tienen dudas de como crear un formulario, pueden ver este tutorial en el que ya realizamos el proceso paso a paso. Este formulario contendrá los siguientes campos:

  1. Nombre de usuario: A este campo le pondremos un máximo de caracteres de 10 en la opción “Max Chars” (o el número de largo que uds. quieran, fijandose siempre en no superar el máximo que definimos en el campo correspondiente de la base de datos) y como nombre de campo le pondremos “username”.
  2. Contraseña: A este campo también le pondremos un máximo de caracteres de 10 en la opción “Max Chars” (también pueden fijarlo según su gusto). Le pondremos de nombre “clave” al campo y en “Type” pondremos “password para que no muestre el texto que se escriba.
  3. Confirmar contraseña: Este campo tendrá las mismas características que el anterior, excepto que el nombre lo fijaremos como “confirmar”.
  4. Correo electrónico: Aquí fijaremos un máximo de caracteres de 30 (o el que uds. decidan), y le pondremos de nombre “email”.
  5. Nombre completo: Este campo lo fijaremos de un máximo de caracteres de 50 y le pondremos de nombre “nombre”.

Y como siempre, los clásicos botones “Enviar” y “Limpiar datos”.

El “Action” de este formulario (página a la que se dirigirá al hacer click en el botón “Enviar”) lo dejaremos fijado a “agregar.php”

3.- Con nuestra base de datos y formulario listos, ahora podemos concentrarnos en el código para registrar al usuario. Para esto crearemos una página llamada “agregar.php” en el cual realizaremos los siguientes pasos:

  1. Confirmaremos que todos los campos han sido llenados.
  2. Confirmaremos que el nombre de usuario no exista actualmente en la base de datos (por ser clave primaria, debe ser único).
  3. Validaremos que la contraseña sea igual en los 2 campos donde se ingresaron.
  4. Registraremos al usuario en nuestra base de datos.

Para esto, insertaremos el siguiente código después de la etiqueta <BODY>. La explicación del código, como siempre, en cursiva, negrita y entre /* */:

$user=$_POST["username"];

$clave=$_POST["clave"];

$confirmar=$_POST["confirmar"];

$email=$_POST["email"];

$nombre=$_POST["nombre"];

$error=0;

/* Primero que todo asignaremos los valores recogidos del formulario en el vector POST a las variables que definimos ($user, $clave, etc). La última variable llamada $error la dejaremos como una bandera para marcar cualquier falla que exista dentro del proceso */

if($user == "" || $clave == "" || $confirmar == "" || $email == "" || $nombre == "") {

    echo "Debe ingresar todos los datos. Por favor vuelva atrás"; 
    $error = 1;

}

/* Básicamente lo que hacemos aquí es controlar mediante una sentencia "if" que todas las variables contengan información. Por eso preguntamos si alguna de ellas esta vacía (separando por el equivalente a ó que es || ) que muestre el mensaje de que faltan datos y le muestre el vínculo para volver al formulario. Además, marcamos nuestra variable $error con un 1 . */

if($clave != $confirmar) {

    echo "Las contraseñas ingresadas no son iguales. Por favor vuelva atrás";
    $error = 1;

}

/* A continuación comprobamos que las contraseñas ingresadas en el formulario, o bien la contraseña y la confirmación sean iguales. Dentro de nuestro "if" preguntamos si son distintas (mediante != ) y si es el caso, mostramos el mensaje que las contraseñas no son iguales y desplegamos el vínculo para volver el formulario. Además, marcamos la variable $error con un 1 . */

else {

    $conexion = mysql_connect("URL del host","usuario","contraseña")
    or die("No se puede conectar a la BD");

    mysql_select_db("nombre de nuestra BD",$conexion)
    or die("No se puede seleccionar la BD");

    $consulta = "SELECT * FROM usuario WHERE username='$user'";

    $resultado = mysql_query($consulta,$conexion)
    or die("Operacion fallida: $consulta");

    /* A este trozo de código se ingresará si los datos del usuario han pasado todas las validaciones anteriores. Lo primero que haremos es establecer una conexión a nuestra base de datos, primero definiendo una variable llamada $conexion y almacenando dentro de ella el resultado de la conexión a la BD mediante la función mysql_connect, a la cual le proveemos los parametros correspondientes a la URL de nuestra base de datos (comunmente es localhost) y el usuario y contraseña que utilizamos para ingresar. Luego seleccionamos la base de datos mediante la función mysql_select_db a la cual le proporcionamos los parametros correspondientes al nombre de la base de datos y los datos de la conexión (almacenados en la variable $conexion). En caso de que alguno de esos proceso fallen, presentamos un mensaje de error y "matamos" el proceso mediante el "or die" correspondiente.

    Luego en una variable $consulta, definimos una consulta a la base de datos de tipo SQL en la cual le pedimos que busque los datos de algún usuario que ya tenga el nombre de usuario que se seleccionó ahora. De esta forma veremos si ya existe algún usuario con esos datos. Finalmente, ejecutamos la consulta mediante la función mysql_query, a la cual le proporcionamos la consulta almacenada en $consulta y los datos de la conexion almacenados en la variable $conexion. El resultado de la consulta lo almacenaremos en la variable $resultado. */

    if(mysql_affected_rows($resultado) == 0) {

        $consulta = "INSERT into usuario(username, clave, email, nombre) VALUES ('$user','$clave','$email','$nombre')";

        $resultado = mysql_query($consulta,$conexion);

        /* Mediante la función mysql_affected_rows (dándole de parámetro el resultado de la consulta) averiguaremos si hubo alguna fila afectada por la consulta recién realizada (la consulta SELECT que buscaba la existencia del usuario), en caso de que la función sea igual a 0 significa que no hubo coincidencias por lo que el nombre de usuario se encuentra libre y podemos proceder a añadir el nuevo usuario a la base de datos. Esto lo hacemos mediante una consulta INSERT, la cual la almacenamos en la variable $consulta (podemos reutilizarla, ya que no necesitaremos el contenido anterior) y el resultado de esta la almacenaremos en $resultado (lo mismo que $consulta) luego de ejecutarla mediante un mysql_query */

        if(!$resultado) {

            echo "Se ha presentado un error al registrar el usuario. <br> Por favor intentelo de nuevo";

            $error = 1;

            exit();

            /* Ahora mediante un if validaremos que no haya ningún problema con la ejecución de la consulta. Al poner !$resultado le preguntamos a la BD si no fue posible obtener un resultado en la ejecución y si es así desplegamos el mensaje de error correspondiente y marcamos nuestra variable $error con un 1 para luego hacer un "exit()" y detener la ejecución */

        } else {

            $error = 2;

            /* El else por supuesto corresponde a que no hubo problemas en la ejecución de la consulta, por lo que marcamos nuestra variable $error con un 2 el cual validaremos más tarde para desplegar un mensaje de éxito */

        }

    } else {

        echo "El nombre de usuario ya existe. Por favor vuelva atrás";
        $error = 1;

        /* Este else corresponde al if que utilizamos con la función mysql_affected_rows , por lo que si entra al else significa que hubo una coincidencia cuando seleccionamos el nombre de usuario de la BD. Así que desplegamos el mensaje correspondiente de error, presentamos el vínculo para volver y marcamos nuestra variable $error con un 1 */

    }

}

if($error == 2) {

    echo "Se ha registrado en el sistema. Bienvenido '$nombre'";

    /* Finalmente validamos si nuestra variable error vale 2, esto significa que logró insertar los datos de forma satisfactoria por lo que presentamos el mensaje de éxito y le damos la bienvenida al usuario usando el nombre que registró en el formulario */

}

Algunas salvedades:

  1. ¿Por qué no desplegamos el mensaje de exito de registro en el else correspondiente en vez de marcar la variable y luego matamos el proceso con un exit() ? . Bueno, lo hicimos así por una simple razón: En caso de que quisieran seguir ejecutando código PHP más adelante en la misma página, si hicieramos un exit, este código no se ejecutaría y la página quedaría muerta en el punto que utilizamos el exit().
  2. Si lo desean, antes de insertar los datos en la BD, pueden encriptar la contraseña con alguno de los métodos conocidos (MD5, Base64 encode, Sha1, etc). PHP ofrece funciones que realizan este proceso de forma sencilla, tanto como poner $clave = md5($clave), con lo que almacenariamos una contraseña encriptada. Recuerden eso sí, que en caso de encriptar la contraseña, deben tener esto presente al momento de realizar autentificación, ya sea decodificando la clave almacenada en la BD antes de comparar, o codificando la contraseña ingresada en la autentificación antes de validar. Si desean saber el método más efectivo, uno de los que está teniendo más aceptación en estos momentos entre los desarrolladores es Base64, pero en el fondo todos tienen sus virtudes y defectos.
  3. Los códigos correspondientes a los “or die” pueden personalizarlos con mensajes más amigables al usuario. Aquí dejamos la consulta puesta para cuando Uds. prueben puedan ver el error exacto que lanza la BD al ejecutar la consulta.
  4. Tal como dijimos al comienzo, aquí tomamos un formulario simple de registro con solo algunos campos. Uds pueden personalizarlos a su gusto dependiendo de la información que quieran recolectar de cada usuario. Solo deben hacer las modificaciones correspondientes en la base de datos, el formulario, las validaciones y la consulta INSERT.
  5. Este formulario es bastante básico en término de validaciones. Hay algunos scripts que pueden encontrar en la Web (principalmente en Javascript) los cuales les permitirán hacer validaciones más extensivas, especialmente con respecto a validar la dirección de correo electrónico de sus usuarios. La intención principal es enseñar como funciona el proceso para que después Uds. puedan ir probando las modificaciones que les parezcan pertinentes.

Y con esto damos término a este nuevo tutorial de PHP donde les enseñamos a hacer un simple registro de usuarios que pueden incorporar a su Web. Esperamos que este tutorial haya sido de utilidad para Uds. y como siempre no duden en dejarnos sus dudas o comentarios al respecto, los cuales trataremos de contestarlos a la brevedad para poder ayudarlos.

Como es habitual, recuerden que este tutorial ha sido desarrollado, probado y documentado por el equipo de Comolohago.cl, por lo que cuenta con nuestro infalible sello de garantía.

Muchas gracias por leer y será hasta una próxima oportunidad.

Comparte este tutorial

El culpable de todo esto

Las tardes gloriosas de domingo y las grandes ovaciones a estadio lleno, no son algo extraño para Xabadu. Luego de ser descubierto a los 4 años en un partido de barrio por los ojeadores del gran Aviación F.C., sacudió el mercado nacional al ser traspasado en $500 pesos chilenos (1 USD) y 3 coca colas al renombrado Estrella Blanca de Lolol. Luego de una impresionante carrera por equipos como Lozapenco, Santa Cruz, Deportivo Lago Chungará y una incursión en la 3a división del futbol de Kazajstan, su record imbatible hasta la fecha de 1257 goles en 20 partidos lo llevo a ser elegido como uno de los arqueros más recordados en la historia pelotera nacional. Una lesión en el colmillo superior derecho lo llevó al retiro el año 2003, pero está de vuelta y sin duda que su jerarquía y experiencia internacional será un gran aporte.

En los barrios marginales se le conoce como: Xabadu

Comentarios en Facebook

82 Comentarios

  • Gracias por es tutorial es excelente y te deja todo bn claro…
    bueno
    tengo un inocveniente en la adaptación del código para lo k estoy trabajando bueno este es mi codigo
     
    $nombre=$_POST[‘name’];
    $apellidos=$_POST[‘apellido’];
    $telefono=$_POST[‘tel’];
    $celular=$_POST[‘cell’];
    $Email=$_POST[‘email’];
    $direccion=$_POST[‘direc’];
    $usuario=$_POST[‘login’];
    $clave=$_POST[‘clave’];
    $confirm=$_POST[‘check’];
    $error=0;
    $perfil=1;
     
    echo $clave.”cscsJJHKJKds<br>”;
     
    if($usuario==”” || $clave==”” || $email==”” || $nombre==””|| $apellidos==””)
    {
    echo “Debe ingresar los datos que tienen asterisco (*).<br>Por Favor Vuelva a Intentarlo”; ?> <a href=”new_user.php”>
    <? echo”Atras<br>”;?> </a>
    <? $error=1;

    }
    if($clave!=$confirm)
    {
    echo “<br>Las contraseñas ingresadas no son iguales.<br>Por Favor Vuelva a Intentarlo”;?> <a href=”new_user.php”>
    <? echo”Atras<br>”;?> </a>
    <? $error=1;

    }
    else
    {
    $conexion=mysql_connect(“localhost”,”root”,”root”) or die(“No se puede conectar a la Base De Datos”);
    mysql_select_db(“observatorio”,$conexion)or die (“No se puede seleccionar la Base De Datos”);
    $consulta=”SELECT * FROM usuario WHERE login = ‘$usuario'” ;
    $resultado=mysql_query($consulta,$conexion) or die (“Operacion Fallida:$consulta”);
    echo $consulta.”  <br>resultado”;

    if(mysql_affected_rows($resultado==0))
    {
    $consulta = “INSERT into usuario(idperfil,login,clave,nombre,apellido,direccion,telefono,email,celular) VALUES (‘$perfil’,’$usuario’,’$clave’,’$nombre’,’$apellidos’,’$direccion’,’$telefono’,’$Email’,’$celular’)”;
    $resultado = mysql_query($consulta,$conexion);
    if(!$resultado)
    {
    echo “Se ha presentado un error al registrar el usuario.<br>Por Favor Intentelo de nuevo”;
    $error=1;
    exit();
    }
    else
    {
    ($error=2);
    }
    }
    else {
    echo”El nombre del usuario ya existe.<br>Por Favor Vuelva a Intentarlo”;?> <a href=”new_user.php”>
    <? echo”Atras<br>”;?> </a>
    <? $error=1; ;
    }
    }
     
    if($error==2)
    {
    echo”Se ha registrado en el sistema.<br>Bienvenido ‘$usuario'”;
    }
    ?>
     
     
    “if(mysql_affected_rows($resultado==0)) ” parece k el nuca entra en el este if …. ya que lo probe sin este y en ese caso si me aparece la informacion  guardada en la BD..pero con este nuca realiza la inserción asi el usuario no exista en la BD…

    Espero que me puedan ayudar con mi problema graciass…desde colombia
     

  • les quiero comentar k ya solucione mi problema,  no me entraba al IF, ya que  estaba mal planteado (o eso Creo).  bueno así esta en el tutorial if(mysql_affected_rows($resultado==0)), lo puse de la siguiente manera  if(mysql_affected_rows($resultado)==0) y así me funciono gracias por el tutorial….

  • Buenas, tengo un problema que me gustaria me ayudaran a solucionar, el codigo me presenta un error al hacer el envio del registro. este es el error que me manda:
     
    Parse error: syntax error, unexpected T_LOGICAL_OR in /home/silkroad/public_html/agregar.php on line 43


    La linea 43 es la que dice lo siguiente:
    42) $resultado = mysql_query ($conexion,$consulta);
    43) or die(“Operacion fallida:$consulta”);
     
    el error es en la 43 el or die ahi me lanza ese error y no se que esta mal, por favor ayudenme que necesito ayuda por favor

  • @Reinaldo Cayama: Elimina el punto y coma antes de ‘or die’.
    Saludos

  • Muchas gracias Xadabu se quito ese error pero ahora me parece otro que dice lo siguiente
    Parse error: syntax error, unexpected T_VARIABLE in /home/silkroad/public_html/agregar.php on line 51
     
    y la linea 51 es la siguiente:
     
    51) if(mysql_affected_rows $resultado==0)
    52) {
     
    por favor y disculpa tanta molestia pero sino pregunto no se como resolverlo muchisimas gracias

  • ayuda urgente por favor lei todos los comentarios y vi algunos errores que correji con las respuestas suyas XABADU pero estoy casi al final y no encuentro respuesta a este error que me arroja y por favor necesito de su ayuda, el error dice lo siguiente:

    Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in /home/silkroad/public_html/agregar.php on line 45
    El nombre de usuario ya existe.
    Por favor vuelva Atras
    Ahora el detalle es el siguiente me dice que el nombre existe pero en realidad es mentira porque solo hay un usuario en la bd y es el de demo que se creo, ahora en la linea 45 dice lo siguiente:
    if(mysql_affected_rows ($resultado==0))
     
    lo cambie de mil maneras posible y no logro solucionar el inconveniente, viendo esto aqui escribo el codigo completo de mi pagina de agregar.php para que por favor me ayuden a solucionar el problema. gracias
    el codigo es el siguiente:
    <html>
    <head>
    <title>Agregar</title>
    </head>

    <body>
    <?
    $user=$_POST[“usuario”];

    $clave=$_POST[“clave”];

    $confirmar=$_POST[“confirmar”];

    $email=$_POST[“email”];

    $nombre=$_POST[“nombre”];

    $error=0;
    if($user==””|| $clave==””|| $confirmar==””|| $email==””|| $nombre==””)

    {

    echo “Debe ingresar todos los datos.<br> Por favor vuelva”; ?> <a href=”registro.html”><? echo “atrás”;?></a><?
    $error=1;
    }
    if($clave!=$confirmar)

    {

    echo “Las contraseñas ingresadas no son iguales.<br> Por favor vuelva “; ?> <a href=”registro.html”><? echo “atrás”;?></a><?
    $error=1;
    }
    else

    {

    $conexion=mysql_connect(“localhost”,”usuario”,”Aqui la clave la borre por seguridad”)
    or die(“No se puede conectar a la BD”);
    mysql_select_db(“Aqui la Base de datos”,$conexion)
    or die(“No se puede seleccionar la BD”);
    $consulta = “SELECT * FROM usuario WHERE usuario=’$user'”;
    $resultado = mysql_query ($consulta,$conexion)
    or die(“Operacion fallida:$consulta”);

    if(mysql_affected_rows ($resultado==0))

    {

    $consulta=”INSERT into usuario(usuario, clave, email, nombre) VALUES (’$user’,’$clave’,’$email’,’$nombre’)”;

    $resultado=mysql_query($consulta,$conexion);

    if(!$resultado)

    {

    echo “Se ha presentado un error al registrar el usuario. <br> Por favor intentelo de nuevo”; ?> <a href=”registro.html”><? echo “Atras”;?></a><?

    $error=1;

    exit();

    }

    else

    {

    $error=2;

    }

    }

    else

    {

    echo “El nombre de usuario ya existe.<br> Por favor vuelva “; ?> <a href=”registro.html”><? echo “Atras”;?></a><?

    $error=1;

    }

    }

    if($error==2)

    {

    echo “Se ha registrado en el sistema. Bienvenido ‘$nombre’”;

    }
    ?>
    </body>
    </html>
    Por favor ayudeneme me urge terminar este registro de usuarios y no se que hcaer espero respuesta pronta, gracias.

  • Reinaldo Cayama: En tu primer error la variable $resultado debe ir entre parentesis ya que es un parametro de la funcion.
    En el segundo la funcion debiese ser asi:
    if(mysql_affected_rows($resultado) == 0)
    Saludos.

  • muchas gracias como siempre amigo Xadabu, corregie el error como me dijiste y coloque el codigo tan cual me lo pusiste y pues el error cambio ahora y de verdad no se que mas hacer aqui te va el error que arroja
    Warning: mysql_affected_rows(): supplied resource is not a valid MySQL-Link resource in /home/silkroad/public_html/agregar.php on line 45
    Se ha presentado un error al registrar el usuario.
    Por favor intentelo de nuevo Atras
     
    Lo puse como me dijiste y ahora sigue informando del error pero dice que se ha presentado un error al registrar el usuario, de verdad no se que hacer neceisto solucionar ese inconveniente para poder poner a funcionar el registro de usuarios en mi web, por favor ayudame arriba esta mi codigo completo lo unico que cambie fue la funcion que me distes tal cual me la escribiste por favor espero tu pronta respuesta y muchas gracias por ayudarme.

  • me sale este error:
    mysql_affected_rows(): supplied resource is not a valid MySQL-Link resource
     a que se debe?

  • @Felipe: Ese error indica que el parámetro que estás pasando en la función mysql_afected_rows, que es el que guarda el resultado de la consulta, es inválido, por lo que probablemente hay un error en la consulta. Intenta probarla directamente para ver que te entrega.
    Saludos!

1 4 5 6 7 8 9

Responder a abifshaka Cancelar respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Gente linda que nos quiere

Donde mas estamos