+ Reply to Thread
Page 1 of 3 123 LastLast
Results 1 to 10 of 22

Thread: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

  1. #1
    eZakto is offline x10 Lieutenant eZakto is an unknown quantity at this point
    Join Date
    May 2006
    Location
    Salta, Argentina.
    Posts
    394

    [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    Crear un sistema de usuarios básico completo 2.0

    Holy Cow! Lo dices enserio?
    Oh sí.
    ¿Por qué 2.0?
    Este, con respecto al anterior, es mejor, más seguro, su código no da asco y utiliza buenos métodos.
    ¿Qué necesito para comenzar?
    Hosting, una base de datos y ganas de leer.

    1. Comencemos
    Lo primero que vamos a hacer, es un archivo que llamaremos 'dbconf.php'. Ahí pondremos los datos necesarios para conectarnos a la base de datos y crearemos la conexión.

    dbconf.php
    PHP Code:
    <?php
    /*
    # [Tutorial] Registro de Usuarios.
    # Por eZakto.
    #
    # Archivo: Configuración de la db [dbconf.php]
    */

    $db_user 'cuenta_usuario';
    $db_pass 'password';
    $db_host 'localhost';
    $db_name 'cuenta_database';
    $tablename 'user_system';

    $db_link mysql_connect($db_host$db_user$db_pass);
    mysql_select_db($db_name);
    ?>
    2. Creando la tabla
    Bien. Ahora debemos crear una tabla en nuestra base de datos. El nombre de ésta debe ser el mismo que el especificado en la variable '$tablename'.
    Esta tabla constará de 4 campos: 'user_id', 'username', 'mail' y 'password'. La primera será int, unsigned y key y el resto tinytext. Puedes crearla manualmente o correr la siguiente sentencia SQL:
    Code:
        CREATE  TABLE  `thaor3_zp3`.`user_system` ( `user_id` INT( 32  )  UNSIGNED NOT  NULL  AUTO_INCREMENT ,
     `username` TINYTEXT NOT  NULL ,
     `mail` TINYTEXT NOT  NULL ,
     `password` TINYTEXT NOT  NULL ,
     PRIMARY  KEY (  `user_id`  ) 
    ) ENGINE  =  MYISAM
    3. El archivo 'register.php' y su formulario, 'register.html'
    Ahora comenzamos con el código. Por favor, antes de hacer copy&paste puro y duro, lee los comentarios que he escrito... El objetivo es aprender. Primero el form, no tiene mucha ciencia. Luego, el php.

    register.html
    HTML Code:
    <form method="POST" action="register.php">
        Usuario:<br />
        <input type="text" name="reg_user" /><br />
        Mail:<br />
        <input type="text" name="reg_mail" /><br />
        Contrase&ntilde;a:<br />
        <input type="password" name="reg_pass" /><br />
        Confirmar contraseña:<br />
        <input type="password" name="reg_cfrm" /><br />
        <br />
        <input type="submit" value="Registrarse" />
    </form>
    register.php
    PHP Code:
    <?php
    /*
    # [Tutorial] Registro de Usuarios.
    # Por eZakto.
    #
    # Archivo: Registro [register.php]
    */

    include('dbconf.php');

    // Detenemos el script si no se han enviado datos.
    if(empty($_POST)) die();

    // Filtramos y asignamos variable a los datos obtenidos (PHP 5)
    $user filter_input(INPUT_POST'reg_user'FILTER_SANITIZE_SPECIAL_CHARS);
    $mail filter_input(INPUT_POST'reg_mail'FILTER_SANITIZE_SPECIAL_CHARS);
    $pass md5($_POST['reg_pass']); // En el caso de la contraseña, no filtramos, solo encriptamos
    $cfrm md5($_POST['reg_cfrm']);

    // Comprobamos que el usuario tenga mas de 3 caracteres
    if(strlen($user) <= 3header('Location: error.html');

    // Comprobamos que el mail sea valido (solo letras, numeros, guion, punto y arroba)
    if(!preg_match('/^([a-z0-9._\-]+)@([a-z0-9._\-]+)\.([a-z]+)$/i'$mail)) header('Location: error.html');

    // Comprobamos lo mismo para la contraseña y ademas que sea igual a la confirmación
    if($pass != $cfrmheader('Location: error.html');

    // Ahora comprobamos que el nombre de usuario no exista en la db
    $sql_check_user mysql_query("SELECT user_id FROM {$tablename} WHERE username='{$user}'");
    if(
    mysql_num_rows($sql_check_user)) header('Location: error.html');

    // Lo mismo con el mail
    $sql_check_mail mysql_query("SELECT mail FROM {$tablename} WHERE mail='{$mail}'");
    if(
    mysql_num_rows($sql_check_mail)) header('Location: error.html');

    // Todas las comprobaciones están hechas, ahora debemos guardar los datos en la db
    $sql_save_data "INSERT INTO {$tablename}(user_id, username, mail, password) VALUES (NULL, '{$user}', '{$mail}', '{$pass}')";
    if(
    mysql_query($sql_save_data)) header('Location: success.html'); // Redirección al registrarse satisfactoriamente
    ?>
    4. El archivo 'login.php' y 'login.html'
    login.html
    HTML Code:
    <form method="POST" action="login.php">
        Usuario:<br />
        <input type="text" name="log_user" /><br />
        Contraseña:<br />
        <input type="password" name="log_pass" /><br />
        <input type="checkbox" name="log_remember" id="remember" /><label for="remember">Iniciar sesi&oacute;n autom&aacute;ticamente</label><br />
        <br />
        <input type="submit" value="Iniciar sesi&oacute;n" /><br />
        <a href="http://forums.x10hosting.com/tutoriales/register.html">Registrarse</a>
    </form>
    login.php
    PHP Code:
    <?php
    /*
    # [Tutorial] Registro de Usuarios.
    # Por eZakto.
    #
    # Archivo: Login [login.php]
    */

    include('dbconf.php');

    // Detenemos el script si no se han enviado datos.
    if(empty($_POST)) die();

    // Filtramos y asignamos variable a los datos obtenidos. Para el login solo necesitamos usuario y contraseña
    $user filter_input(INPUT_POST'log_user'FILTER_SANITIZE_SPECIAL_CHARS);
    $pass md5($_POST['log_pass']); // La contraseña la encriptamos, si es igual a la de registro, el hash será el mismo

    // Buscamos el nombre de usuario en la db
    $sql_check_user "SELECT username,password FROM {$tablename} WHERE username='{$user}'";
    if(!
    mysql_num_rows($sql_check_user)) header('Location: error.html'); // Cuidado aquí, noten el '!' en la condición

    // Con la misma sentencia SQL, comprobamos que el hash de la contraseña sea el mismo
    while($row mysql_fetch_array($sql_check_user)) {
        if(
    $pass != $row['password']) header('Location: error.html');
    }

    // Insertartamos una cookie con la id del usuario y otra con un hash en base al usuario y el hash de la contraseña
    while($row mysql_fetch_array($sql_check_user)) {
        
    // Antes, definiremos la duracion de las cookies. Será una hora ó un año (si el usuario quiere recordar sus datos)
        
    $time = (!$_POST['log_remember']) ? time()+3600 time()+31536000;
        
    // Ahora si, las cookies
        
    setcookie('user_id'$row['user_id'], $time);
        
    setcookie('user_hash'md5($row['username'] . $row['password']), $time);
    }

    header('Location: index.html'); // Redirección cuando el usuario se haya logeado satisfactoriamente
    ?>
    5. El 'logout'
    logout.php
    PHP Code:
    <?php
    /*
    # [Tutorial] Registro de Usuarios.
    # Por eZakto.
    #
    # Archivo: Logout [logout.php]
    */

    include('dbconf.php');

    // Comprobamos que el usuario haya iniciado sesión antes
    if($_COOKIE['user_hash']) {
        
    // Reescribimos las cookies con una fecha ya pasada, el navegador la eliminará
        
    setcookie('user_id'''time()-3600);
        
    setcookie('user_hash'''time()-3600);
    }

    header('Location: index.html'); // Redirección
    ?>
    6. El corazón: la función "isOnline()"
    isonline.php
    PHP Code:
    <?php
    /*
    # [Tutorial] Registro de Usuarios.
    # Por eZakto.
    #
    # Archivo: isOnline [isonline.php]
    */

    include('dbconf.php');

    // Creamos la función que comprueba los datos
    function isonline() {
        
    // Comprobamos que las cookies existan
        
    if(!$_COOKIE['user_id']) return false;
        if(!
    $_COOKIE['user_hash']) return false;
        
    // Filtramos las cookies
        
    $user_id filter_input(INPUT_COOKIE'user_id'FILTER_SANITIZE_SPECIAL_CHARS);
        
    $user_hash filter_input(INPUT_COOKIE'user_hash'FILTER_SANITIZE_SPECIAL_CHARS);
        
    // Con la id guardada, buscamos al usuario y obtenemos su información
        
    $sql_check_user "SELECT username,password FROM {$tablename} WHERE user_id='{$user_id}'";
        while(
    $row mysql_fetch_array($sql_check_user)) {
            
    // Ahora rearmamos el user_hash con los datos guardados y comprobamos que sean iguales
            
    $real_hash md5($row['username'] . $row['password']);
            if(
    $user_hash != $real_hash) return false;
        }
        return 
    true;
    }
    ?>
    7. Implementando
    El login está termiando! Hurra!
    Para implementarlo, sólo debes incluir el archivo isonline.php al principio del documento que quieras proteger. Luego, el contenido a proteger lo encierras en un condicional de php 'if(isonline()) {' y si quieres mostrar un mensaje en caso de no estar logueado, le agregas un 'else {'.

    protected.php
    HTML Code:
    <?php
    include('isonline.php');
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>P&aacute;gina protegida</title>
    </head>
    <body>
    <?php
    // Compruebo si el usuario está logueado
    if(isonline()) {
    ?>
    
    Bienvenido a la p&aacute;gina protegida.<br />
    <a href="http://forums.x10hosting.com/tutoriales/logout.php">Cerrar sesi&oacute;n</a>
    
    <?php
    // Si no lo está...
    } else {
    ?>
    
    Debes iniciar sesión para ver esta página<br /><br />
    <?php include('login.html'); ?>
    
    <?php
    }
    ?>
    </body>
    </html>
    ------------

    No he probado nada, si encuentran algún error, por favor, avisenme.
    -> Descarga los archivos de ejemplo
    Last edited by Kansy; 07-13-2008 at 06:29 PM.

  2. #2
    hezuo's Avatar
    hezuo is offline x10 Sophmore hezuo is an unknown quantity at this point
    Join Date
    Dec 2007
    Location
    Huascar, Santa Anita
    Posts
    174

    Thumbs up Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    gracias por el tuto, se nota que me va a servir mucho, que recién he comenzado a aprender php... :happysad:

  3. #3
    Amadis is offline x10Hosting Member Amadis is an unknown quantity at this point
    Join Date
    Feb 2008
    Posts
    31

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    No es por nada, pero creo que le faltan algunas cositas. Por ejemplo, un pequeño panel después de hacer login y, además, adaptarlo a un portal dinámico (?id=xxx)

  4. #4
    eZakto is offline x10 Lieutenant eZakto is an unknown quantity at this point
    Join Date
    May 2006
    Location
    Salta, Argentina.
    Posts
    394

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    Es un tutorial para crear un sistema de usuarios básico. Su uso lo eliges tu.

  5. #5
    jyatrave is offline x10Hosting Member jyatrave is an unknown quantity at this point
    Join Date
    Dec 2007
    Posts
    12

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    Está perfecto, ya logre colocar un sistema en una de mis creaciones.

    Se agracede!!!

  6. #6
    Aikas is offline x10Hosting Member Aikas is an unknown quantity at this point
    Join Date
    Jul 2008
    Posts
    12

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    Me viene perfecto muchas gracias funciona perfeto :D

  7. #7
    ZharkD's Avatar
    ZharkD is offline Retired ZharkD is an unknown quantity at this point
    Join Date
    Jan 2008
    Location
    MX
    Posts
    5,914

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    muy bueno y me gusta las explikaciones paso a paso ke vas dando tanto dentra como fuera del codigo ;)
    estos aportes valla ke se agradecen


    salu2
    Last edited by ZharkD; 08-17-2008 at 09:09 PM.

  8. #8
    cursillo's Avatar
    cursillo is offline x10Hosting Member cursillo is an unknown quantity at this point
    Join Date
    Apr 2008
    Posts
    10

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    Gracias, muy práctico

    Manu

  9. #9
    gruponov's Avatar
    gruponov is offline x10 Sophmore gruponov is an unknown quantity at this point
    Join Date
    Jul 2008
    Location
    Medellin
    Posts
    231

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    El tuto esta bueno pero es solo para php o html

  10. #10
    dirfinyu is offline x10Hosting Member dirfinyu is an unknown quantity at this point
    Join Date
    Nov 2008
    Posts
    4

    Re: [TUTORIAL] Crear un sistema de usuarios básico completo 2.0

    Muchas gracias, me será muy util en mi web

+ Reply to Thread
Page 1 of 3 123 LastLast

Similar Threads

  1. Replies: 39
    Last Post: 06-06-2010, 05:04 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
x10hosting free hosting for the masses
dedicated servers