Autor Tema: Crear sistema de activacion por email  (Leído 7190 veces)

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Crear sistema de activacion por email
« en: 18 de Febrero de 2010, 13:30:59 pm »
Os habeis preguntado alguna vez como hacer que despues del registro enviarle por email al usuario un enlace para activar la cuenta? He creado este tutorial para que aprendais a hacerlo.

Para empezar debemos crear en nuestra base de datos una tabla llamada activacion con los campos id, code, userid

code - Este campo lo usaremos para guardar un codigo unico aleatorio

userid – El usuario al que se le activara la cuenta

El codigo sql para crear esta tabla es:
Código: [Seleccionar]
CREATE TABLE `activacion` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(35) NOT NULL,
  `userid` decimal(11,0) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
Ahora vamos con el PHP:

En el codigo de registro hacemos un query para crear un registro en la tabla activacion. Pero antes generamos un codigo aleatorio:

$code 
sha1(mt_rand().time().mt_rand().$_SERVER['REMOTE_ADDR']);

Tambien usaremos la funcion mysql_insert_id para extraer la ID del usuario registrado..

mysql_query
("INSERT INTO activacion ('code', 'userid') VALUES (´".$code."´, ´".mysql_insert_id()."´);");

La funcion mysql_insert_id solamente funciona si hay mas arriba un mysql_query, por ejemplo:

mysql_query
("INSERT INTO `usuarios` (`nick`, `fecha`) VALUES ('marco', '20 enero 2010')");

Ahora solo nos queda enviar por email el link para que el usuario active la cuenta. utilizaremos la funcion mail con las cabeceras necesarias para poder enviar un email en formato HTML:


mail
("email_usuario@yahoo.com","Porfavor activa tu cuenta",$cuerpo,"Content-type: text/html\r\n");

El cuerpo del mensaje sera el siguiente:


Hola
para activar tu cuenta haz click en el siguiente link:
 \
n
<a href="http://www.mipagina.com/activar.php?code=dff6d99507fc9eab4ec755e18d993e9e2e3">http://www.mipagina.com/activar.php?code=dff6d99507fc9eab4ec755e18d993e9e2e3</a>
O copia el siguiente link en la barra de direcciones de tu navegador:
 \
n
http
://www.mipagina.com/activar.php?code=dff6d99507fc9eab4ec755e18d993e9e2e3

Por lo tanto la variable cuerpo quedaria asi:


$cuerpo 
= &#39;Hola, para activar tu cuenta haz click en el siguiente link:
&#39;."\n".&#39;
<a href="http://www.mipagina.com/activar.php?code=&#39;.$code.&#39;">http://www.mipagina.com/activar.php?code=&#39;.$code.&#39;</a>
O copia el siguiente link en la barra de direcciones de tu navegador:
&
#39;."\n".&#39;
http://www.mipagina.com/activar.php?code=&#39;.$code;


Ahora solo nos falta el archivo activar.php para que el usuario pueda activar la cuenta.

Para empezar filtramos la variable code para evitar las injectiones sql

$code 
mysql_real_escape_string($_GET[&#39;code&#39;]);

Buscamos el codigo en la base de datos para ver si existe:
$sql mysql_query("SELECT * FROM activacion WHERE code=&#39;".$code."&#39;;");
if(
mysql_num_rows()==0) {
echo 
"Lo siento, el codigo de activacion no existe";
} else {
//secuencia para activar la cuenta
}


En caso de que exista el codigo procedemos a activar la cuenta con el siguiente codigo: (puede variar dependiendo de vuestra estructura de las bases de datos)
Extraemos los datos del codigo de activacion para saber la id del usuario al que le vamos a activar la cuenta

$codigo 
mysql_fetch_array($sql);

En el siguiente codigo reemplazamos el nombre de la tabla de nuestro usuario y tambien tenemos que crear una celda en nuestra tabla de usuarios llamada “activate”.

mysql_query
("UPDATE `usuarios` SET `activate` = &#39;1&#39; WHERE `id` = ".$codigo[&#39;userid&#39;]." LIMIT 1;");

y por ultimo eliminamos el codigo de registro de la base de datos:

mysql_query
("DELETE FROM `activacion` WHERE `id` = 3 LIMIT 1");

Creo que esto es todo, a continuacion os dejo el codigo de cada archivo (activar.php, registro.php);
registro.php

mysql_query
("INSERT INTO `usuarios` (`nick`, `fecha`) VALUES (&#39;marco&#39;, &#39;20 enero 2010&#39;)");
$code sha1(mt_rand().time().mt_rand().$_SERVER[&#39;REMOTE_ADDR&#39;].mysql_insert_id());
mysql_query("INSERT INTO activacion (`code`, `userid`, `time`) VALUES (&#39;".$code."&#39;, &#39;".mysql_insert_id()."&#39;, &#39;".time()."&#39;)");
$cuerpo = &#39;Hola, para activar tu cuenta haz click en el siguiente link:
&#39;."\n".&#39;
<a href="http://www.mipagina.com/activar.php?code=&#39;.$code.&#39;">http://www.mipagina.com/activar.php?code=&#39;.$code.&#39;</a>
O copia el siguiente link en la barra de direcciones de tu navegador:
&
#39;."\n".&#39;
http://www.mipagina.com/activar.php?code=&#39;.$code;
mail("email_usuario@yahoo.com","Porfavor activa tu cuenta",$cuerpo,"Content-type: text/html\r\n");

activar.php

$code 
mysql_real_escape_string($_GET[&#39;code&#39;]);
	
$sql mysql_query("SELECT * FROM activacion WHERE code=&#39;".$code."&#39;;");
	
if(
mysql_num_rows()==0) {
	
echo 
"Lo siento, el codigo de activacion no existe";
	
} else {
	
$codigo mysql_fetch_array($sql);
	
mysql_query("UPDATE `usuarios` SET `activate` = &#39;1&#39; WHERE `id` = ".$codigo[&#39;userid&#39;]." LIMIT 1;");
	
}

Y listo!!! Gracias por leer este tutorial :)


Este usuario ya no lo uso, mi nuevo usuario es marco811

Comunidad PHPeros

Crear sistema de activacion por email
« en: 18 de Febrero de 2010, 13:30:59 pm »

Desconectado ferri

  • PHPero Experto
  • *****
  • Mensajes: 642
  • Karma: 40
  • Sexo: Masculino
    • Ver Perfil
Re:Crear sistema de activacion por email
« Respuesta #1 en: 18 de Febrero de 2010, 13:39:13 pm »
¡¡Buenísimo tutorial!! Ahí va +1 kekoman. :D

Un saludo. ;)

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re:Crear sistema de activacion por email
« Respuesta #2 en: 18 de Febrero de 2010, 16:40:56 pm »
Esta bien, te doy un +1 :)

Saludos
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado kekoman

  • PHPero Master
  • ******
  • Mensajes: 1.180
  • Karma: 45
  • Sexo: Masculino
  • Mi nuevo usuario es marco811
    • Ver Perfil
Re:Crear sistema de activacion por email
« Respuesta #3 en: 18 de Febrero de 2010, 22:53:09 pm »
Gracias por el karma :)


Este usuario ya no lo uso, mi nuevo usuario es marco811