Ver Mensaje Individual
  #8 (permalink)  
Antiguo 09/02/2009, 18:01
Avatar de acoevil
acoevil
 
Fecha de Ingreso: julio-2008
Ubicación: localhost/colombia/sevillaValle.php
Mensajes: 1.123
Antigüedad: 15 años, 8 meses
Puntos: 32
Respuesta: Testeando mi sistema

Hola quetal ya he terminado el codigo de este escript pues no se que mas depurar si alguien tiene algo que me pueda aportar a mejorar el sistema seria de gran ayuda ya que llevo poco tiempo con PHP5 y estoy apenas nobato jeje

Basicamente lo que hace es recupear la contraseña del usuario, primero que todo introduze el correo el sistema valida el correo contra todo mal jeje valida que no este vacio el campo despues que todo sale correcto envia un email a la persona con un link dirigiendolo a una pagina donde se encuentran 2 inputs para llenar la nueva contraseña

El sistema funciona muy bien pero siempre es bueno mejorarlo y optimizarlo gracias por sus aportes.


RecuperarPassword.php

<?php
session_start();
function setEmail($mensaje="")
{

echo $mensaje;
?>
<form action="clasesRecuperarPassword.php" method="post">
<table>
<tr><td>Escriba su Email</td><td><input type="text" name="email"></td></tr>
<tr><td><input type="submit" name="setEmail" value="Enviar"></td></tr>
</table>
<form>
<?
}
function setPassword($mensaje="")
{
echo $mensaje;
?>
<form action="clasesRecuperarPassword.php" method="post">
<table>
<tr>
<td>Escriba su contraseña</td><td><input type="text" name="clave1"></td>
</tr>
<tr>
<td>Repita su contraseña</td><td><input type="text" name="clave2"></td>
</tr>
<tr>
<td><input type="submit" name="setPassword" value="Enviar"></td>
</tr>
</table>
</form>


<?


}

if($_GET['accion']=="Remail") //escribir email
{
setEmail($_GET['mensaje']);
}
elseif($_GET['accion']=="Enmail")//escribir passwords
{
setPassword($_GET['mensaje']);
}
?>

/////////////Aqui las clases//////////


<?php
session_start();
class Utiles
{
protected $ruta="RecuperarPassword.php";
protected $accionE="Enmail"; //funcion setEmail ->No cambiar este valor
protected $accionR="Remail"; //Funcion setPassword->No cambiar este valor
protected $conexion;

public function conexionDB($Usernom="root",$Userpass="",$userdb="M ydb",$servidor="localhost")
{
$conexion=mysql_connect($servidor,$Usernom,$Userpa ss) or die ("No se pudo conectar");
mysql_select_db($userdb,$conexion) or die ("No se pudo seleccionar DB");

if($conexion)
{
return $this->conexion=$conexion;
}
return "Ocurrio un problema en la DB";
}
protected function CamposVaciosPass($array)
{
foreach($array as $clave => $valor)
{
if(empty($valor) || !isset($clave))
{
header("location:".$this->ruta."?accion=".$this->accionE."&mensaje=".
urlencode("Los campos se encuentran incompletos"));
return false;
}
}
return true;
}
protected function CamposVaciosEmail($email)
{
if(empty($email))
{
header("location:".$this->ruta."?accion=".$this->accionR."&mensaje=".
urlencode("El campo Email se encuentra vacio"));
return false;
}
return $email;
}


protected function quitar($email) //funcion para quitar caracteres no permitidos
{
$nopermitidos = array("'",'\\','<','>',"\"",";","$","%","&","/","|","{","}","[","]","+","#");
$email = str_replace($nopermitidos,"", $email);
return $email;
}
protected function quitar_htmls($cadena)
{
$cadena=strip_tags($cadena);
return $cadena;
}
protected function mysql_escape($cadena)
{
if(mysql_real_escape_string($cadena))
{
return $cadena;
}
else
{
echo "Ocurro un error escapando la cadena";
return false;
}
}


}
class EnviarMensaje extends Utiles
{
function EnviarMensaje()
{
$email=$_POST['email'];
//Utilizo los metodo heredados de la clase Utiles
if($this->CamposVaciosEmail($email))
{
//quito toda etiqueta HTML
$email=$this->quitar_htmls($email);
//quito todo caracter no permitido
$email=$this->quitar($email);
$comprobarEmail="select login from usuarios where email='$email'";
$comprobarEmail=$this->mysql_escape($comprobarEmail);
//compruebo que el email existe en la DB
if($this->ComprobarEmail($comprobarEmail))
{
//si el email existe mando el email de verificacion
$this->MandarEmail($email);
session_register("email");
}
}
}

protected function ComprobarEmail($comprobarEmail)
{
$Comprobar=mysql_query($comprobarEmail);
if($Comprobar)
{
if(mysql_num_rows($Comprobar)>0)
{
return true; //Si existe algun usuario con este email
}
else
{
header("location:".$this->ruta."?accion=".$this->accionR."&mensaje=".
urlencode("El email no existe"));
return false;
}

}
}
protected function MandarEmail($email)
{
//manda un email para verificar si en realidad el usuario N perdio el
//password si es verdad sigue con la otra funcion
$asunto="Verificacion de Usuario";
$mensaje="Hemos recibido una solicitud para recuperar la contraseña y hemos enviado este
Email para verificar que usted fue el que envio este mensaje.
Para verificar que usted envio este mensaje de clic en el siguiente enlace
http://www.truekesoft.net/foro_sebas/".$this->ruta."?accion=".$this->accionE;

$headers = "From: Admin [email protected] \r\n";
$headers .= "Return-Path: [email protected] \r\n";
$headers .= "Reply-To: [email protected] \r\n";
$headers .= "X-Sender: [email protected] \r\n";
$headers .= "X-Priority: 3 \r\n";
$headers .= "MIME-Version: 1.0 \r\n";
$headers .= "Content-Transfer-Encoding: 7bit \r\n";

if(@mail($email,$asunto,$mensaje,$headers))
{
header("location:".$this->ruta."?accion=".$this->accionR."&mensaje=".
urlencode("Porfavor verifique su correo"));

return true;
}
else
{
echo "No se pudo enviar el Email";
return false;
}
}





}
class RecepcionMensaje extends Utiles
{
private $clave1;
private $clave2;
private $claveEncriptada;
function RecepcionMensaje()
{
if($this->isset_session("email"))
{
if($this->CamposVaciosPass($_POST))
{
extract($_POST);
$this->clave1=$clave1;
$this->clave2=$clave2;
//quito etiquetas HTML
$this->clave1=$this->quitar_htmls($this->clave1);
$this->clave2=$this->quitar_htmls($this->clave2);
//Todo sale bien verifico las contraseñas y las encrito con sha1
if($this->contrasenas($this->clave1,$this->clave2))
{
$actualizacion=mysql_query("update usuarios set clave='$this->claveEncriptada' where
email='$_SESSION[email]'");
if($actualizacion)
{
header("location:index.php?mensaje=".urlencode("La contraseña se
actualizo correctamente"));
return true;
}
else
{
header("location:".$this->ruta."?accion=".$this->accionE."&mensaje=".
urlencode("Ocurrio un error modificando las contraseñas"));
return false;
}
}
}
}
}
protected function contrasenas($clave1,$clave2)
{
if($clave1==$clave2 && $clave1>=6 && $clave2>=6)
{
$clave1=sha1($clave1);
return $this->claveEncriptada=$clave1;
}
header("location:".$this->ruta."?accion=".$this->accionE."&mensaje=".
urlencode("Las contraseñas tienen menos de 6 caracteres o son diferentes"));
return false;
}
protected function isset_session($email)
{
if(isset($_SESSION["email"]))
{
return true;
}
header("location:".$this->ruta."?accion=".$this->accionE);
return false;
}
}

//Configuro la DB
$db=new Utiles;
$db->conexionDB("root","","foro_db","localhost");

//Me ayuda a saber cual es el formulario de llegada si es setMail o setPassword
if($_REQUEST['setEmail']=="Enviar")
{
$mensaje=new EnviarMensaje();
}
elseif($_REQUEST['setPassword']=="Enviar")
{
$password=new RecepcionMensaje();
}


?>