Tema: Pedido
Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/05/2015, 10:45
BanNsS1
 
Fecha de Ingreso: junio-2009
Mensajes: 101
Antigüedad: 14 años, 11 meses
Puntos: 13
Respuesta: Pedido

No es tan simple como crees. De todas formas te lo haré de forma rápida y sin detallar mucho

Código PHP:
<?php
class Account {
    
//[...]
    
    
public static function valid_email($email){
        if(
preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,5})$/'$email)){
            return 
true;
        }else{
            return 
false;
        }
    }
    
    public static function 
email_exists($email){
        
/*
            Aqui iría la consulta a tu base de datos de usuarios comprobando que exista algun usuario con ese email.
            Algo como:
        */
        
$q mysql_query("SELECT email FROM users WHERE email='".mysql_real_escape_string($email)."'");
        if(
mysql_num_rows($q) == 1){
            return 
true;
        }
        return 
false;
    }
    
    public static function 
send_mail($to,$subject,$message){
        
#SMTP: Librería para enviar correos electrónicos en PHP
        
require('smtp/class.phpmailer.php');
        require(
'smtp/class.smtp.php');

        
$mail = new PHPMailer();
        
$mail->IsSMTP(); 
        
$mail->Host "";    //Servidor SMTP
        
$mail->From "";    //Correo electrónico enviante
        
$mail->FromName "";//Nombre enviante
        
$mail->Subject $subject;
        
$mail->MsgHTML($message);
        
$mail->AddAddress($to"");    //La segunda opción es para especificar el "nombre" del destinatario. Pues poner su nombre de usuario.
        
$mail->SMTPAuth true;
        
$mail->Username "";//Correo electrónico enviante
        
$mail->Password "";//Contraseña correo electrónico enviante
        
if(!$mail->Send()) {
            return 
false;
        }else{
            return 
true;
        }
    }
    
    public static function 
send_forgotpassword_email($email){
        
$email trim($email);
        if(empty(
$email))
            return array(
false,"Debes rellenar todos los campos");
        if(!
self::valid_email($email))
            return array(
false,"El correo electrónico especificado es inválido");
        if(!
self::email_exists($email))
            return array(
false,"El correo electrónico especificado no corresponde a ningún usuario");
        
        
//código para cambiar su contraseña. Si no te quieres complicar puede ser su email encriptado:
        
$token md5($email); //md5() -> 32 caracteres : numero hex
        
$subject sprintf("%s: Recuperar Contraseña","MIPAGINA"); //MIPAGINA: Recuperar Contraseña
        
$message sprintf("Hola %s,<br/>""nombre_de_usuario");
        
$message .= sprintf("Has solicitado recuperar tu cuenta de %s, para hacerlo necesitarás el siguiente código:<br/> %s<br/>","MIPAGINA",$token);
        
$message .= "Un saludo.";
        if(
self::send_mail($email,$subject,$message)){
            return array(
true,"Mensaje enviado con éxito. Comprueba tu bandeja de entrada");
        }else{
            return array(
false,"Ha ocurrido un error. Por favor, inténtalo de nuevo.");
        }
        
    }
    
    public static function 
encrypt($password){
        return 
Sha1(md5($password));    //O la forma que utilices para encryptar contraseñas.
    
}
    
    public static function 
change_password($token,$pass1,$pass2,$email){
        if(
$pass1!=$pass2)
            return array(
false,"La contraseña y su verificación no coinciden");
        if(
$token!=md5($_POST['fgtpw_email']))
            return array(
false,"El token introducido es inválido");
        
        if(
mysql_query("UPDATE users SET password='".self::encrypt($pass1)."' WHERE email='".mysql_real_escape_string($email)."'")){ //mysql_real_escape_string() no sería necesario si pasas el email de forma segura
            
return array(true,"Contraseña cambiada con éxito.");
        }else{
            return array(
false,"Ha ocurrido un error. Por favor, inténtalo de nuevo.");
        }
    }
}
    if(isset(
$_POST['fgtpw_token']) && isset($_POST['fgtpw_pw1']) && isset($_POST['fgtpw_pw2']) && isset($_POST['fgtpw_email'])){
        
$result Account::change_password($_POST['fgtpw_token'],$_POST['fgtpw_pw1'],$_POST['fgtpw_pw2']);
        if(
$result[0]){
            echo 
$result[1];
        }else{
            echo 
"Error:".$result[1];
        }
    }else if(isset(
$_POST['fgtpw_email'])){
        
$result Account::send_forgotpassword_email($_POST['fgtpw_email']);
        if(
$result[0]){
            
//Correo enviado, Nuevos datos (?)
?>    
            <div id="result"><?php echo $result[1];?></div>
            <form action="#" method="post">
                <input type="text" placeholder="Token" name="fgtpw_token" />
                <input type="password" placeholder="Nueva Contraseña" name="fgtpw_pw1" />
                <input type="password" placeholder="Repite tu Contraseña" name="fgtpw_pw2" />
                <input type="hidden" name="fgtpw_email" value="<?php echo $_POST['fgtpw_email'];?>" /> <!-- Esto no es una buena forma de pasar el email, esto es solo un ejemplo, podrias hacerlo con una variable de sesión $_SESSION -->
                <input type="submit" value="Enviar" />
            </form>
<?php
        
}else{
            
//Error enviando el mensaje
?>    
            <div id="result">Error: <?php echo $result[1]; ?></div>
            <form action="#" method="post">
                <input type="text" placeholder="Correo Electrónico" name="fgtpw_email" />
                <input type="submit" value="Enviar" />
            </form>
<?php
        
}
    }else{
        
//Main Screen
?>
        <form action="#" method="post">
            <input type="text" placeholder="Correo Electrónico" name="fgtpw_email" />
            <input type="submit" value="Enviar" />
        </form>
<?php
    
}
?>
Seguramente no es ni la mejor manera ni la más optima y habré pasado por alto alguna cosa pero no concretas demasiado, lo he hecho de forma rápida y para lo que pagas... jajajaja

Un saludo, espero que te sirva al menos como algo orientativo