Regresar a la página www.ComoCrearTuWeb.com
Página 8 de 12 PrimerPrimer ... 456789101112 ÚltimoÚltimo
Resultados 106 al 120 de 166

Tema: Registro de usuarios desde cero.

  1. #106
    Esto empieza a ser un vicio... Habitante Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,329
    Poder de Reputación
    21
    Síp, también sirve como solución el email.
    Si al final mira qué útil es esto de los correos jaja

  2. #107
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Si, al final van a servir, je je je.

    Bueno, pues sigo entonces basándome en lo dicho antes.

    El campo 'estado' ya no va a ser tipo ENUM sino CHAR. Así puede contener además de los valores 'activo' e 'inactivo', el código aleatorio que se va a generar y que será enviado al usuario para que confirme su registro.

    Para modificar ese campo, regreso al SQL del phpMyAdmin y escríbole esto:

    ALTER TABLE 'usuarios' CHANGE 'estado' 'estado' CHAR( 12 ) NOT NULL
    Es decir, modifico el campo 'estado' de la tabla 'usuarios', pasándola al tipo CHAR de 12 carácteres y continuando no pudiendo ser nulo su valor.

    Ahora admite además de los valores 'activo' y 'inactivo' los valores como '123456789012' que serán los códigos aleatorios comentados.

  3. #108
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Bueno, siguiendo estas ideas pasamos a reformar el código para incluir esta mejora.

    El final del código del archivo registro.php era este:

    Código PHP:
    .............................
        else
            {
            
    //introducimos el nuevo registro en la tabla users
            
    $hasheadahash('sha256'$password) ;
            
    $salteada saltear();
            
    $hasheada hash('sha256'$salteada $hasheada);
            
    mysql_query("INSERT INTO $tabla (nick,password,salteada,email) values ('$nick','$hasheada','$salteada','$email') ");  
            echo 
    "<br /><p>Usuario registrado con éxito con Nick=$nick, Contraseña=$password y email=$email</p>";
            
    // damos la opcion de logerase
            
    echo '<br /><a href="login.php">Quieres logearte?</a>';
            }
        
    mysql_free_result($cuantosnicks);  //liberamos memoria
        
    mysql_free_result($cuantosemails); //liberamos memoria
       
    }
    ?> 
    Y lo vamos a cambiar. Para empezar añadiendo la variable $codigodevalidacion que será generado de forma aleatoria, por arte de magia, con esta línea:

    Código PHP:
     $codigodevalidacion rand(000000000000,999999999999); 
    y reformamos qué valores de qué variables se van a incluir en la tabla, quedando el bloque anterior así:

    Código PHP:
    .............................
        else
            {
            
    //introducimos el nuevo registro en la tabla users, pero inactivo hasta correo de verificación
            
    $hasheadahash('sha256'$password) ;
            
    $salteada saltear();
            
    $hasheada hash('sha256'$salteada $hasheada);
            
    $codigodevalidacion rand(000000000000,999999999999);
            
    mysql_query("INSERT INTO $tabla (nick,password,salteada,email,estado) values ('$nick','$hasheada','$salteada','$email','$codigodevalidacion') "); 
            echo 
    "<br /><p>Usuario registrado con éxito con Nick=$nick, Contraseña=$password y email=$email</p><p>La cuenta aún no está activa hasta que se verifique mediante el correo que se ha enviado al Email con el que se ha registrado. Revise por tanto su correo por favor.</p>";
            
    // damos la opcion de logerase, por si ha respondido al correo de verificación y aún tiene esta página abierta.
            
    echo '<br /><a href="login.php">Quieres logearte?</a>';
            }
        
    mysql_free_result($cuantosnicks);  //liberamos memoria
        
    mysql_free_result($cuantosemails); //liberamos memoria
       
    }
    ?> 
    Genial, perfecto. Pero no hemos conseguido capar la entrada de este usuario ni que se le envie el correo. Vamos ahora a modificar el archivo chequeo.php para que el usuario que aún no se ha verificado no consiga entrar en el sistema de registro, oki?

  4. #109
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Lo dicho, vamos a por el archivo chequeo.php!

    Tenemos que ver si el usuario que intenta logearse, está en estado activo, inactivo o esperando confirmación, es decir, si hay un código en el valor del campo 'estado', no? Esto lo haremos tras confirmar que el usuario existe, que la contraseña es correcta y antes de crear la sesión claro.

    Ahora me alegro de haber puesto tantos comentarios dentro del código! ja ja ja ja

    Bien, en ese lugar que digo, miraremos si el usuario está activo, inactivo o esperando verificación y en función de cada cosa pondremos lo que corresponda. Es una buena ocasión para aplicar un.... cómo se llamaba... ah, un CASE o SWITCH!

    Código PHP:
    .................................
    // login correcto, continuamos... 
    $estado=$datosdelusuario["estado"];

    switch ( 
    $estado )
      {
         case 
    'activo':  // Activo, le damos paso al sistema de registro.
             
    session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
             
    session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
             
    $_SESSION[usuario] = $datosdelusuario["nick"]; //damos el nick a la variable usuario
             
    $_SESSION[idusuario] = $datosdelusuario["id"]; //damos la id del user a la variable idusuario
             
    header("Refresh: 4; URL=login.php");
             echo 
    '<br /><p>Logeado compañero'."$_SESSION[usuario]".'.</p>';
         break;
         case 
    'inactivo':  // Estado inactivo, informar al usuario.
             
    echo "<p>Su cuenta existe y los datos de acceso son correctos, pero por algún motivo su cuenta está desactivada</p><p>Contacte con el administrador de esta web para arreglar el problema. Gracias.</p>";
         break;
         default: 
    // Registrado y validado, activar la cuenta.
             
    echo "<p>Su cuenta está pendiente de ser verificada a través del correo que se le ha enviado al correo con el que se registró. Chequee su email para activarla.</p>."      ;
      }

    ?> 

  5. #110
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Y ahora? Nos falta hacer que el correo salga hacia el usuario y... la página a la que se envía tras pulsar el enlace del correo para activar la cuenta.

    Vamos primero a la página a la que se manda a l usuario cuando hace click en el link del correo de verificación. Sería un archivo nuevo en el que, para empezar se recoge el valor GET que viene en la URL, el código aleatorio.

    Nombre del archivo: verificar_cuenta.php
    Código PHP:
    <?php
    $codigo 
    $_GET['codigo'];
    include_once(
    'configuracion.php');
    $consulta mysql_query(" SELECT * FROM ".$tabla." WHERE estado='".$codigo."' ");
    $datosdelusuario mysql_fetch_array($consultaMYSQL_ASSOC);
    if (
    $datosdelusuario[estado] == $codigo)
         {
         
    mysql_query(" UPDATE $tabla SET estado='activo' WHERE estado='$codigo' ");
         echo 
    "<p>Cuenta verificada, gracias y bienvenido <b>$datosdelusuario[nick]</b>.</p>";
         echo 
    "<p>Quiere <a href=\"login.php\">logearse ahora</a>?</p>";
         }
    else 
    // Si no existe ese codigo en la tabla....
         
    {
         echo 
    "<p>El código de verificación no es valido.</p>";
         }
    ;
    ?>
    Pero para llegar a esta página, necesitamos una url, del tipo http : //www .dominio/verificar_cuenta.php?codigo=123456789012 o similar. Es la que hemos de enviar al usuario a su correo electronico. Vamos a ver cómo se lo enviamos....

  6. #111
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    No la había usado antes. La función para enviar mails mediante php es mail(). Qué originales, no?

    Código PHP:
    mail($destino$asunto$mensaje$encabezados); 
    De modo que, en el archivo registro.php que teníamos, cuyo código terminaba así:

    Código PHP:
    ...................
    ..................
           
    //introducimos el nuevo registro en la tabla users, pero inactivo hasta correo de verificación
            
    $hasheadahash('sha256'$password) ;
            
    $salteada saltear();
            
    $hasheada hash('sha256'$salteada $hasheada);
            
    $codigodevalidacion rand(000000000000,999999999999);
            
    mysql_query("INSERT INTO $tabla (nick,password,salteada,email,estado) values ('$nick','$hasheada','$salteada','$email','$codigodevalidacion') ");
            echo 
    "<br /><p>Usuario registrado con éxito con Nick=$nick, Contraseña=$password y email=$email</p><p>La cuenta aún no está activa hasta que se verifique mediante el correo que se ha enviado al Email con el que se ha registrado. Revise por tanto su correo por favor.</p>";
            
    // damos la opcion de logerase, por si ha respondido al correo de verificación y aún tiene esta página abierta.
            
    echo '<br /><a href="login.php">Quieres logearte?</a>';
            }
        
    mysql_free_result($cuantosnicks);  //liberamos memoria
        
    mysql_free_result($cuantosemails); //liberamos memoria
       
    }
    ?> 
    Añadimos algunas líneas para dejarlo así:

    Código PHP:
    ..................
    ......................
           
    //introducimos el nuevo registro en la tabla users, pero inactivo hasta correo de verificación
            
    $hasheadahash('sha256'$password) ;
            
    $salteada saltear();
            
    $hasheada hash('sha256'$salteada $hasheada);
            
    $codigodevalidacion rand(000000000000,999999999999);
            
    mysql_query("INSERT INTO $tabla (nick,password,salteada,email,estado) values ('$nick','$hasheada','$salteada','$email','$codigodevalidacion') ");
            
    $mensaje="Hola $nick. Acabas de registrarte en $midominio pero has de activar la cuenta haciendo clic en el siguiente enlace: Enlace de activación: http://$midominio/verificar_cuenta.php?codigo=$codigodevalidacion";
            
    // Enviando el correo...
            
    mail($email"Validación de su nueva cuenta en $midominio"$mensaje"From: $miemail");
            
    // Aviso para el usuario.
            
    echo "<br /><p>Usuario registrado con éxito con Nick=$nick, Contraseña=$password y email=$email</p><p>La cuenta aún no está activa hasta que se verifique mediante el correo que se ha enviado al Email con el que se ha registrado. Revise por tanto su correo por favor.</p>";
            
    // damos la opcion de logerase, por si ha respondido al correo de verificación y aún tiene esta página abierta.
            
    echo '<br /><a href="login.php">Quieres logearte?</a>';
            }
        
    mysql_free_result($cuantosnicks);  //liberamos memoria
        
    mysql_free_result($cuantosemails); //liberamos memoria
       
    }
    ;
    ?> 
    Eso si, la función mail() de php requiere que tu servidor te la permita usar. Nos dejará?

  7. #112
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Habrás visto que he añadido un par de variables. $miemail y $midominio

    He pensado que para no tener que ir cambiando esos datos en sabe Dios qué archivos, va a bastar con rellenar su valor con los vuestros definiendo estas variables en el archivo configuración, al igual que los de acceso a la base de datos. De este modo, ese será el único archivo a retocar una vez se termine este sistema de registro de usuarios, oki?

    De modo que añadimos esas definiciones en el archivo configuracion.php:

    Código PHP:
    <?php

    $dbhost
    ="localhost"//Host del mysql
    $dbuser="xxxx_xxxx"//Usuario del mysql
    $dbpass="xxxxxxxxxxxxxx"//Password del mysql
    $db="xxxx_xxxxxxx"//db donde se creará la tabla users
    $tabla="usuarios"//nombre de la tabla de usuarios

    //conectamos y seleccionamos db
    mysql_connect("$dbhost","$dbuser","$dbpass");
    mysql_select_db("$db");

    //Datos mios
    $miemail="micorreo@midominio.com";  // Lo usa el archivo registro.php
    $midominio="midominio.com";  // Lo usa el archivo registro.php

    //Comenzamos la sesión
    session_start();

    ;
    ?>

  8. #113
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Funciona!!!!

    ja ja ja ja, que alegria.

  9. #114
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Me apunto por acá que con $_SERVER[REMOTE_ADDR]; puedo captar la IP de un usuario. Quizás sea bueno para guardarla y detectar usuarios con dos cuentas, o para banear a usuarios tras x intentos de acceso en un corto periodo de tiempo, verdad? Ya lo usaremos, seguro ;=)

  10. #115
    Me va gustando esto... Habitante
    Fecha de Ingreso
    10 oct, 11
    Mensajes
    189
    Poder de Reputación
    13
    Woap, recién veo este post, tiene 8 páginas, luego me lo leo y updateo para expresar seguramente mi agradecimiento (?)

    Saludos!!

  11. #116
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Genial, que necesito vuestro punto de vista antes de pasar esto a lecciones de CCTW! je je je.

    Un abrazo, yo me voy a la cama que ya es hora, ja ja ja

  12. #117
    Esto empieza a ser un vicio... Habitante Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,329
    Poder de Reputación
    21
    Te lo estás currando mucho Jorge! Gracias!!

    Lo que me pregunto es cómo es posible banear a un usuario durante X tiempo y que automáticamente se desbanee cuando pase ese tiempo

  13. #118
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Pillar la ip.de.un indeseable ya has visto que es facil. habra que vuarsar la ip en una tabla. luego crear una tarea que se ejecute cada cierto tiempo de forma automatica para comprobar esos usuarios baneados y el tiempo que ha pasado. en servidores estos autoejecutables se llaman algo asi como cron. hay que investigar, peri somos expertos en eso. je je je. ups que complicao escribir con el movil jajaja

  14. #119
    Esto empieza a ser un vicio... Habitante Avatar de Doodleo
    Fecha de Ingreso
    25 abr, 11
    Ubicación
    Galicia (España)
    Mensajes
    1,329
    Poder de Reputación
    21
    Jajaja, ya pensé que era Carlitos
    Sí, me suena algo así... Cron Jobs puede ser?

  15. #120
    Administrador CCTW Webmaster de CCTWHabitante Avatar de Jorgens_CCTW
    Fecha de Ingreso
    30 ene, 11
    Ubicación
    Cartagena, Murcia, España.
    Mensajes
    1,184
    Poder de Reputación
    10
    Pues no creas, que ya usa el movil mejor que yo este Carlitos, je je je.

    Si, podría ser eso de los cron jobs, me suena, pero aun no he profundizado mucho en ellos.

Página 8 de 12 PrimerPrimer ... 456789101112 ÚltimoÚltimo

Temas Similares

  1. Empezando desde cero
    Por May en el foro Foro General
    Respuestas: 3
    Último Mensaje: 28/08/2011, 17:17
  2. Iniciando desde Cero
    Por Are$ en el foro Foro General
    Respuestas: 7
    Último Mensaje: 06/01/2011, 06:45
  3. Crear un foro desde cero
    Por Abel_Melero en el foro Foros
    Respuestas: 1
    Último Mensaje: 16/12/2009, 23:01

Etiquetas para este Tema

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •