Ver Mensaje Individual
  #7 (permalink)  
Antiguo 24/04/2016, 05:03
Avatar de Jfco
Jfco
 
Fecha de Ingreso: marzo-2016
Mensajes: 8
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: Como generar enlaces para cambiar la password de un usuario en una web

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;
}
}

Última edición por Jfco; 08/05/2016 a las 03:43