Tambien os dejo la parte principal de mi codigo:
//Include the Mysql_conexion file...
//Obten la variable '$link' de conexion...
include 'conex.php';
//Ininializa las variables que se utilizan en este script...
$Autorizado = "not-user";
$Local = "not-nick";
$Clave = "not-pass";
$token = "not-token";
//Recupera el email pasado por el usuario en el anterior script...
$email = $_POST['email'];
//Obten nombre de usuario con dicho email...
$select='SELECT nombre,username FROM users WHERE email = "' . $email . '"';
$qry = mysql_query($select,$link)
or die('<BR>' . mysql_error() . '<BR><BR> Error_sql_command!!!... <BR>' . $select);
// Finaliza la Aplicacion!!!...
while($row = mysql_fetch_array($qry)) {
$Autorizado = $row[0];
$Local = $row[1];
}
//Obten el password de dicho email...
$select='SELECT clave FROM locales WHERE local="' . $Local . '"';
$qry = mysql_query($select,$link)
or die('<BR>' . mysql_error() . '<BR><BR> Error_sql_command!!!... <BR>' . $select);
// Finaliza la Aplicacion!!!...
while($row = mysql_fetch_array($qry)) {
$Clave = $row[0];
}
//Funcion main();
//------------
//Comprueba si el email pasado esta registrado...
//Si esta Autorizado dicho email...
//Le enviaremos un email al usuario con su clave actual y con un enlace para
//el cambio de clave el cual llevara la llave (token) con caducidad a las 24h...
//El codigo SQL para programar la caducidad en el registro es:
// Activa planificador de Eventos...
// SET GLOBAL event_scheduler = ON
// CREATE EVENT myevent
// ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 24 HOUR
// DO DELETE FROM `datos`.`tblreseteopass` WHERE `tblreseteopass`.`creado`
// <= DATE_SUB(CURTIME(), INTERVAL 1 DAY)
//Si no esta Autorizado dicho email...
//Aparece una pantalla de Error!!!. Dicha pantalla contiene un boton para
//redireccionar al usuario a un formulario para que se registre...
if($Autorizado != "not-user"){
echo "<br><br><div class='alert alert-warning'><strong>" . $email . "</strong>";
echo "<br><br>Local...";
echo "<br><strong>" . $Local . "</strong>";
echo "<br><br>Autorizacion...";
echo "<br><strong>" . $Autorizado . "</strong>";
echo "<br><br></div>";
//llamamos la funcion que nos va a generar la llave (token) con su link de
//acceso para el posible cambio de clave enviandolo por email al usuario.
$linkTemporal = generarLinkTemporal( $Local );
if($linkTemporal){
// the message html... mail($contact,$subject,$msg,$headers)...
$contact = $email;
$subject = "Recuperacion de Clave...";
$msg = "<html>
<head>
<title>Clave de acceso...</title>
</head>
<body>
<br><I>Destinatario...</I><br><strong>" . $contact . "</strong>
<br><br><I>Local...</I><br><strong>" . $Local . "</strong>
<br><br><I>Autorizacion...</I><br><strong>" . $Autorizado . "</strong>
<br><br><I>Clave...</I><br><strong>" . $Clave ."</strong>
<p><I><br>Haz clic en el enlace, para cambiar tu clave de acceso.
<br>Dispones de 24 horas para poder realizar dicho cambio!!!
<br><br>Si no funciona dicho enlace, accede a la direccion web indicada
<br>e introduce en ella el codigo de activacion.</I></p>
<br><label><strong><I><a href=" . $linkTemporal . "> Cambiar clave </I></a>
</strong></label>
<br><br><strong>Enlace web...</strong><br>" . $web . "<br><br>
<strong>Codigo de activacion...</strong><br>" . $token . "
</body>
</html>";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
$headers .= "From: <
[email protected]>" . "\r\n";
$headers .= "Cc: <
[email protected]>" . "\r\n";
// use wordwrap() if lines are longer than 70 characters
$msg = wordwrap($msg,70);
// send email and copy with Cc:...
mail(utf8_decode($contact),utf8_decode($subject),u tf8_decode($msg),utf8_decode($headers));
// say echo...
echo "<div class='alert alert-info'> Se ha enviado un correo de recuperacion ";
echo "de clave: <strong>
[email protected] </strong> al email indicado.";
echo "<br> En dicho correo, se adjuntan las instrucciones y autorizacion ";
echo "para cambio de contraseña.";
echo "<br> Si no recibe tal correo, por favor pongase en contacto con nosotros ";
echo "a traves de: <strong>
[email protected]</strong></div>";
}else{
//si se produce fallo de escritura 'mysql' nos re-enviamos un Report con el error...
echo '<form id="frmRestablecer" action="report.php" method="post">';
echo '<center><br><div class="alert alert-warning">';
echo "<I>Se ha producido un error al acceder a la Base de Datos... </I></B><br>";
echo "<N><I>Reintententelo trancurridos unos minutos... </I></N></B><br>";
echo "<br><IMG SRC='Logo7.jpg' WIDTH=100 HEIGHT=80><br><br>";
echo "<I> Si el problema persiste...</I><br>";
echo "<N><I> contacte con nuestro Administrador para solventarlo!!!</I></N>";
echo '<br><br><div class="form-group">';
echo '<input type="hidden" NAME="user" VALUE="' . $Autorizado .'"/>';
echo '<input type="hidden" NAME="local" VALUE="' . $Local .'"/>';
echo '<input type="hidden" NAME="email" VALUE="' . $email .'"/>';
echo '<input type="hidden" NAME="coment" VALUE="' . $error . $fail .'"/>';
echo '<input type="submit" class="btn btn-primary" value="Enviar informe" ><br>';
echo '</div>';
echo '</form>';
}
}else{
echo '<form id="frmRestablecer" action="registro.php" method="post">';
echo '<center><br><br><br><div class="alert alert-warning">';
echo "<IMG SRC='Logo7.jpg' WIDTH=100 HEIGHT=80><br><br>";
echo "<I>No existe una cuenta asociada a... </I><B>" . $email . "</B><br>";
echo "<I> Contacte con nuestro Administrador de cuentas para nuevo registro!!!</I>";
echo '<br><br><div class="form-group">';
echo '<input type="hidden" NAME="email" VALUE="' . $email .'"/>';
echo '<input type="submit" class="btn btn-primary" value="Registrar usuario" >';
echo '</div>';
echo '</form>';
}
function generarLinkTemporal($username){
//Declaramos 'variables globales'...
global $token, $web, $link, $error, $fail;
//obten el Token (llave) a pasar junto con el link...
//The sha1() function calculates the SHA-1 hash of a string...
//The md5() function calculates the MD5 hash of a string...
$cadena = $username.rand(1,9999999).date('Y-m-d');
//$token = sha1($cadena);
$token = md5($cadena);
//Borra los Token del usuario que esten guardados para evitar colisiones...
$select='DELETE FROM tblreseteopass WHERE username="' .$username . '"';
$result = mysql_query($select,$link);
// or die('<BR>' . mysql_error() . '<BR><BR> select_command... ' . $select);
// Finaliza la Aplicacion!!!...
if($result){
//Guardalo el nuevo Token para compararlo con el que 'pase' el usuario...
$select='INSERT INTO tblreseteopass (username, token) VALUES("' .$username . '","' . $token . '")';
$result = mysql_query($select,$link);
// or die('<BR>' . mysql_error() . '<BR><BR> select_command... ' . $select);
// Finaliza la Aplicacion!!!...
}
if($result){
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$enlace = "http://" . $host . $uri . "/validarclave.php?token=" . $token;
$web = "http://" . $host . $uri . "/validarclave.php";
//echo "Token..." . $token . "<br>";
//echo "Ruta..." . $enlace . "<br>";
//echo "Ruta absoluta..." .dirname(__FILE__);
return $enlace;
}else{
$error= 'Validaremail(error!)... ' . mysql_error();
$fail = '<BR> Select_command... ' . $select;
return FALSE;
}
}