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:
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 = 'Hola, para activar tu cuenta haz click en el siguiente link:
'."\n".'
<a href="http://www.mipagina.com/activar.php?code='.$code.'">http://www.mipagina.com/activar.php?code='.$code.'</a>
O copia el siguiente link en la barra de direcciones de tu navegador:
'."\n".'
http://www.mipagina.com/activar.php?code='.$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['code']);
Buscamos el codigo en la base de datos para ver si existe:
$sql = mysql_query("SELECT * FROM activacion WHERE code='".$code."';");
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` = '1' WHERE `id` = ".$codigo['userid']." 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 ('marco', '20 enero 2010')");
$code = sha1(mt_rand().time().mt_rand().$_SERVER['REMOTE_ADDR'].mysql_insert_id());
mysql_query("INSERT INTO activacion (`code`, `userid`, `time`) VALUES ('".$code."', '".mysql_insert_id()."', '".time()."')");
$cuerpo = 'Hola, para activar tu cuenta haz click en el siguiente link:
'."\n".'
<a href="http://www.mipagina.com/activar.php?code='.$code.'">http://www.mipagina.com/activar.php?code='.$code.'</a>
O copia el siguiente link en la barra de direcciones de tu navegador:
'."\n".'
http://www.mipagina.com/activar.php?code='.$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['code']);
$sql = mysql_query("SELECT * FROM activacion WHERE code='".$code."';");
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` = '1' WHERE `id` = ".$codigo['userid']." LIMIT 1;");
}
Y listo!!! Gracias por leer este tutorial
