Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/05/2009, 12:10
jochite
 
Fecha de Ingreso: septiembre-2008
Mensajes: 185
Antigüedad: 16 años, 4 meses
Puntos: 1
sistema de recuperación de contraseña olvidada

He utilizado un script que aparece en este foro y que pretendo aplicarlo a la página web.

Parto de un formulario de control de usuario que contiene los campos de email,
username y passaword. También he añadido un link ¿ Olvidaste la contraseña?
que me dirige a recuperar_1.php donde comprobaré si la dirección de correo esta
en la base de datos usuario y si es así me dirigiré a recuperar_2.php .

¿ La primera pregunta es como crear un formulario de comprobación del correo en la base de datos y otro formulario que procese los campos password, password2 y tmptxt_seg?

¿ en el campo tmptxt_seg que tipo de dato debo incluir en la tabla usuarios ?



recuperar_1.php

<?php

//conectamos a la BD

$conexion = mysql_connect('localhost','ipcval','ip2')or die ('Ha fallado la conexión: '.mysql_error());

mysql_select_db('base_ip)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']) ) { //comprobamos 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.";

}}}

?>
------------------------------------------------------------------------------------------
recuperar_2.php

<?php

session_start(); //abrimos la sesion para poder despues pasar variables de una pagina a otra

//datos para establecer la conexion con la base de mysql.
$conexion=mysql_connect('localhost','ipval','ip09' )or die ('Ha fallado la conexión: '.mysql_error());

mysql_select_db('base_ip')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) {
if(get_magic_quotes_gpc() != 0) {
$cadena = stripslashes($cadena);
}
return mysql_real_escape_string($cadena);
}







if (isset($_POST["password"])) {

$password = quitar($_POST["password"]); //variable que viene del campo del form pasword
$password2 = quitar($_POST["password2"]);//variable que viene del campo del form pasword2
$password = mysql_escape($password); //aplico la funcion mysql_escape
$password2 = mysql_escape($password2);

$password = md5($password); // codificamos los password con md5
$password2 = md5($password2);
$email = $_SESSION['email']; // recogemos la variable email y username que guardamos en la sesion en el script anterior
$username = $_SESSION['username'];




// Hay campos en blanco
if($password==NULL|$password2==NULL) {
echo "un campo está vacio.";

}else{
// si coiciden los codigos de seguridad
if (quitar($_SESSION['tmptxt_seg']) !== quitar($_POST['tmptxt_seg'])) {
echo "Introdujo mal el codigo de seguridad.";

} else {




// ¿Coinciden las contraseñas?
if($password!=$password2) {
echo "Las contraseñas no coinciden";
formRegistro();
}else{


$query = "UPDATE usuarios
SET password = '$password' WHERE usuario = '$username' OR email ='$email' " ;
mysql_query($query) or die(mysql_error());

//obtengo los datos del usuario para mandar el email
$result = "SELECT * FROM usuarios WHERE password = '$password'";

$result = mysql_query($result) or die ( mysql_error() );

$row = mysql_fetch_array($result);

echo "La activacion de su nuevo password tuvo exito.";


// Datos del email

$nombre_origen = "Lo que sea";
$email_origen = "[email protected]";
$email_copia = "[email protected]";
$email_ocultos = "[email protected]";
//$email_destino = "".$row['email']."";

$email_destino = "[email protected]"; //cambiar esta linea por la de encima cuando se termine la aplicacion para pruebas pon tu email

$asunto = "Activacion de nueca contraseña, guarde 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 sus datos '.$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>SU EMAIL : </strong>'.$row['email'].'</strong><br><br><br>
<strong>REACTIVO SU NUEVA CONTRASEÑA SIN NINGUN INCIDENTE.</strong><br><br>
<strong>GRACIAS POR CONFIAR EN CEVIT.</strong><br>
<strong>PRONTO ACTUALIZAREMOS CONTENIDOS, ESTATE ATENTA/O.</strong><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"; }

if (@mail($email_destino, $asunto, $mensaje, $headers))
{ }

}
}
}
}

?>

---------------------------------------------------------------------------------------
seguridad.php
<?php



function randomText($length) { //FUNCION PARA CREAR UNA CLAVE ALEATORIA
$pattern = "123456789PIUYTREWQASDFGHJKLMNBVCXZ123456789PLMK1I JNBHUYGVC123456789FTRDXZSEWAQWSDERFTGYHUJ123569876 543ERDFREDESWQASWQASDGHGTY";

for($i=0;$i<$length;$i++) {

$key .= $pattern{rand(0,35)};
}
return $key;
}

$_SESSION['tmptxt_seg'] = randomText(5); //aqui guardo el numero que se escribira en la imagen en variable de sesion para su us en la confirmacion

$captcha_seg = imagecreatefromgif("../carpeta/carpeta/bgcaptcha.gif"); //obtenemos la imagen de fondo

$colText = imagecolorallocate($captcha_seg, 0, 0, 0);

imagestring($captcha_seg, 5, 10, 4, $_SESSION['tmptxt_seg'], $colText);

header("Content-type: image/gif");

imagegif($captcha_seg);

?>