Tema: recuperacion de contraseñas (con md5)
Pregunta: como puedo hacer para que mis usuarios recuperen su contraseña si la olvidaron.
Respuesta:
1- Un formulario para que el usuario escriba su email, si existe en la BD, lo redirigimos a otro formulario
2-En el nuevo formulario, hacemos que el usuario, escriba una nueva contraseña y hacemos un UPDATE a la BD
3-En mi caso como tengo implementado un sistema de activacion de cuentas via email, que esta en este foro, desactivo al usuario y le envio un nuevo link de activacion a su email. Pero para no hacer demasiado largo el aporte y como ya esta en el foro no lo incuyo.
Pero si dejo preparado un email que se le enviara al usuario informandole que se cambio su password con exito.
4-el segundo formulario incluye un archivo de seguridad captcha para formularios aportado por pato12, puede que no sea el mejor sistema pero se puede poner la imagen de fondo que quieras. El archivo se llama segurudad.php y despues explicare que hace, pero este archivo de seguridad sera llamado por el formulario de esta manera:
imagen que contendra un codigo de seguridad, esta hecho para una imagen de 100x30 llamada
bgcaptcha.gif que teneis que crear vosotros
Estos scripts son para principiantes como yo
Empecemos:
Archivo
recuperar.php Código PHP:
procesa los datos eviados por POST de un formulario con un campo llamado email
<?php
//conectamos a la BD
$conexion = mysql_connect('localhost','xxxx','xxxx')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('registro')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
function quitar($mensaje) //funcion para quitar caracteres no permitidos
{
$nopermitidos = array("'",'\\','<','>',"\"",";","$","%","&","/","|","{","}","[","]","+","#");
$mensaje = str_replace($nopermitidos, "", $mensaje);
return $mensaje;
}
function mysql_escape($cadena) { //funcion pasada por okram para limpiar campos escritos por usuarios
if(get_magic_quotes_gpc() != 0) { //y aplicar mysql_real_escape_string a las variables y stripslashes si la magic cuotes estan activadas
$cadena = stripslashes($cadena);
}
return mysql_real_escape_string($cadena);
}
$email = quitar($_POST ['email']);
$_SESSION['email'] = $email; //guardamos email en una variable de session para recuperarlo en el siguiente form
if(isset($_POST['email']) ) { //comprovamos que el campo email trae algun valor
$query = "SELECT * FROM usuarios WHERE email='$email'"; //seleccionamos la informacion de la BD correspondiente al email del user
$result = mysql_query($query , $conexion) or die ( mysql_error() );
while ($row = mysql_fetch_array($result)){
if (isset($row['password'])){ //compruebo que exista el password del email enviado
$_SESSION['username'] = $row['usuario'];//guardamos el usuario en una variable de sesion
//para no tener problemas con header uso el siguiente script de java para redirigir
?>
<SCRIPT LANGUAGE="javascript">
location.href = "recuperar_2.php";
</SCRIPT>
<?
}else{
echo "El email no esta registrado en nuestra base de datos.";
}}}
?>