Te cuento como lo hago yo, este sería mi formulario de registro:
Código PHP:
<p align="center"><strong>Registro de Promotores </strong></p>
<table width="661" height="393" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="662" colspan="3" align="center" valign="top" >
<form action="registra.php" method="post">
<table width="59%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="18" colspan="4" align="center"><a href="javascript:history.go(-1)" class="Estilo19">Volver</a></td>
</tr>
<tr>
<td height="54" colspan="4"><div align="center"><span class="Estilo18">Esta intentando entrar en una zona restringida a usuarios, por favor, registrese, le llevara 30 sg, despues podrá tener acceso a todas las secciones.</span></div></td>
</tr>
<tr>
<td height="21" colspan="4"><div align="center" class="Estilo17"><strong>Registro</strong></div></td>
</tr>
<tr>
<td width="14%" align="right" class="Estilo18"> </td>
<td width="33%" height="31" class="Estilo24">Usuario <span class="Estilo27">(max 10):</span></td>
<td width="43%"><input type="text" name="username" size="20" maxlength="20" class="estilotextarea44" style="font-family:verdana; font-size:10pt" /></td>
<td width="10%"> </td>
</tr>
<tr>
<td align="right" class="Estilo18"> </td>
<td height="29" class="Estilo24">Password <span class="Estilo27">(max 10):</span></td>
<td><input type="password" name="password" size="10" maxlength="10" class="estilotextarea43" style="font-family:verdana; font-size:10pt" id="password" /></td>
<td> </td>
</tr>
<tr>
<td align="right" class="Estilo18"> </td>
<td height="29" class="Estilo24">Confirmar passw:</td>
<td><input type="password" name="password2" size="10" maxlength="10" class="estilotextarea42" style="font-family:verdana; font-size:10pt" /></td>
<td> </td>
</tr>
<tr>
<td align="right" class="Estilo18"> </td>
<td height="29" class="Estilo24">Email <span class="Estilo25"><span class="Estilo28">(max 40)</span>:</span> </td>
<td><input type="text" name="email" size="20" maxlength="40" class="estilotextarea41" style="font-family:verdana; font-size:10pt" /></td>
<td> </td>
</tr>
<tr>
<td height="35" colspan="4" align="center"><input type="submit" value="Registrar" class="boton" /></td>
</tr>
<tr>
<td height="40" colspan="4" align="center"><span class="Estilo18">Le será enviado un correo electrónico para confirmar sus datos por favor ingrese correctamente su e-mail, gracias.</span></td>
</tr>
</table>
</form>
Esto genera un correo con el que grabo la cadena a validar en registra.php:
Código PHP:
//añadimos la funcion que se encargara de generar un numero aleatorio
function genera_random($longitud){
$exp_reg="[^A-Z0-9]";
return substr(eregi_replace($exp_reg, "", md5(rand())) .
eregi_replace($exp_reg, "", md5(rand())) .
eregi_replace($exp_reg, "", md5(rand())),
0, $longitud);
}
// verificamos si se han enviado ya las variables necesarias.
if (isset($_POST["username"])) {
$username = $_POST["username"];
$password = $_POST["password"];
$password2 = $_POST["password2"];
$email = $_POST["email"];
// Hay campos en blanco
if($username==NULL|$password==NULL|$password2==NULL|$email==NULL) {
echo "un campo está vacio.";
}else{
// ¿Coinciden las contraseñas?
if($password!=$password2) {
echo "Las contraseñas no coinciden";
}else{
// Comprobamos si el nombre de usuario o la cuenta de correo ya existían
$checkuser = mysql_query("SELECT usuario FROM promuser WHERE usuario='$username'");
$username_exist = mysql_num_rows($checkuser);
$checkemail = mysql_query("SELECT email FROM promuser WHERE email='$email'");
$email_exist = mysql_num_rows($checkemail);
if ($email_exist>0) {
echo "La cuenta de correo estan ya en uso";
}else{
if ($username_exist>0) {
echo "El nombre de usuario esta ya en uso";
}else{
//agregamos la variable $activate que es un numero aleatorio de
//20 digitos crado con la funcion genera_random de mas arriba
$activate = genera_random(20);
//aqui es donde insertamos los nuevos valosres en la BD activate y el valor 1 que es desactivado
$query = 'INSERT INTO promuser (usuario, password, email, fecha, activate, estado)
VALUES (\''.$username.'\',\''.$password.'\',\''.$email.'\',\''.date("Y-m-d").'\',\''.$activate.'\', 1)';
mysql_query($query) or die(mysql_error());
echo "<table width=70%><tr bgcolor= #61e877 class= estilo30><div align=center>";
echo 'Has sido registrado en tusitio como: <b>'.$username.' </b>de manera satisfactoria.<br />';
echo ' Gracias. Te enviaremos ahora un email<br />';
echo 'para activar tu cuenta, al correo que nos indicaste.<br />';
echo "</div></tr>";
echo "</table>";
$query = "SELECT * FROM promuser WHERE usuario='$username'";
$result = mysql_query($query , $conexion) or die ( mysql_error() );
$row = mysql_fetch_array($result);
$path="http://misitio.com/"; //creamos nuestra direccion, con las carpetas que sean si hay
//armamos nuestro link para enviar por mail en la variable $activateLink
$activateLink=$path."activar_cuenta.php?id=".$row['id_usuarios']."&activateKey=".$activate."";
// Datos del email
$nombre_origen = "*Fulanito";
$email_origen = "[email protected]";
$email_destino = "".$row['email']."";
$asunto = "".$row['usuario']." Datos de registro en TUSITIO, guarda este email.";
$mensaje = '<table width="629" border="0" cellspacing="1" cellpadding="2">
<tr>
<td width="623" align="left"></td>
</tr>
<tr>
<td bgcolor="#2EA354"><div style="color:#FFFFFF; font-size:14; font-family: Arial, Helvetica, sans-serif; text-transform: capitalize; font-weight: bold;"><strong> Estos son tus datos de registro, '.$row['usuario'].'</strong></div></td>
</tr>
<tr>
<td height="95" align="left" valign="top"><div style=" color:#000000; font-family:Arial, Helvetica, sans-serif; font-size:12px; margin-bottom:3px;"> USUARIO: '.$row['usuario'].'</strong><br><br><br>
<strong>TU CLAVE : </strong>'.$row['password'].'</strong><br><br><br>
<strong>TU EMAIL : </strong>'.$row['email'].'</strong><br><br><br>
<strong>TU LINK DE ACTIVACION:<br><a href="'.$activateLink.'">'.$activateLink.' </strong></a><br><br><br>
<strong>POR FAVOR HAs CLICK EN LINK DE ARRIBA PARA ACTIVAR tU CUENTA E INGRESAR A LA PAGINA SIN RESTRICCIONES</strong><br><br><br>
<strong>GRACIAS POR REGISTRARTE EN X SITIO</strong><br><br><br>
</div>
</td>
</tr>
</table>';
$formato = "html";
//*****************************************************************//
$headers = "From: $nombre_origen <$email_origen> \r\n";
$headers .= "Return-Path: <$email_origen> \r\n";
$headers .= "Reply-To: $email_origen \r\n";
$headers .= "X-Sender: $email_origen \r\n";
$headers .= "X-Priority: 3 \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Transfer-Encoding: 7bit \r\n";
//*****************************************************************//
if($formato == "html")
{ $headers .= "Content-Type: text/html; charset=iso-8859-1 \r\n"; }
else
{ $headers .= "Content-Type: text/plain; charset=iso-8859-1 \r\n"; }
@mail($email_destino, $asunto, $mensaje, $headers);
}
}
}
}
}else{
}
Bueno, ya has enviado el correo con la liga. Ahora, es aquí en donde valido que el usuario me haya dando un correo que sea de él, en activar_cuenta.php:
Código PHP:
//recogemos los valores enviados por el link de activacion que mandamos por mail
if (isset($_GET['id'])) {
$idval=$_GET['id'];
$activate2=$_GET['activateKey']; ;
//y aqui es donde cambiamos el valor 1=desactivado por valor 0=activado
$query = "UPDATE promuser
SET estado = '0' WHERE id_usuarios = $idval and activate ='$activate2' ;
mysql_query($query) or die(mysql_error());
?>
<SCRIPT LANGUAGE="javascript">
location.href = "index.php";
</SCRIPT>
<?
}else{
echo "activacion incompleta.";
}
Gran parte de este código creo haberlo tomado de este foro, pero no recuerdo quién fue quien lo posteo, pero igual creo que funciona bien.
Saludos y espero que te sirva!