Foros del Web » Programando para Internet » PHP »

Pequeño error codigo - Contraseña aleatoria enviada por email

Estas en el tema de Pequeño error codigo - Contraseña aleatoria enviada por email en el foro de PHP en Foros del Web. Hola a todos amigos, os cuento que estoy haciendo un sistema de recuperación de contraseñas, la cosa va bastante bien pero tengo algún pequeño error ...
  #1 (permalink)  
Antiguo 01/08/2011, 11:09
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Pequeño error codigo - Contraseña aleatoria enviada por email

Hola a todos amigos, os cuento que estoy haciendo un sistema de recuperación de contraseñas, la cosa va bastante bien pero tengo algún pequeño error de código que no detecto , si alguien me puede echar un vistazo lo agradecería.

Tengo dos archivos, el form.php y funcion.php

En el form incluyo este php:

Código PHP:

<?php

include('funcion.php');

// meto la contraseña aleatoria en la variable
$contrasenaSetRandomPassword();

// meto la con encrytada en variable
$encriptada=md5(SetRandomPassword());

?>


Luego despues del form, si el email es de verdad de un usuario y todo eso... 
pues llamo a las funciones para enviar el email y para hacer el 'update'
 a la bd con la nueva contraseña encriptada:

// si no da error

 <?php else: ?>

 <?php if(insertarNuevaClave($encriptada$emailValue)):?>

 <?php enviarContrasena($emailValue,$contrasena); ?>

<?php endif; ?>
Por otro lado aquí las funciones a las que llamo.

Código PHP:

SetRandomPassword
()    // funcion para contraseña aleatoria 
(la he probado en un archivo solo y funciona bien asi que no pongo el codigo)

Funcion para hacer el update:



function 
insertarNuevaClave($encriptada,$emailValue) {
    
$conn conectar(); // la conexion esta probada y funciona.
    
$sql"update usuarios set password=$encriptada 
                  where email='$emailValue'"
;
    
    }

Y mando el Email con la contraseña sin encriptar.

function 
enviarContrasena($emailValue$contrasena){
    
$dominio "http://www.midominio.com/";
    
$mail = new PHPMailer();
    
$mail->IsSMTP();
    
$mail->SMTPAuth true;
    
$mail->SMTPSecure "tls";
    
$mail->Host       "smtp.gmail.com";
    
$mail->Port       587;
    
$mail->Username "miusuario";
    
$mail->Password "micontraseña";
    
$body 
            <html> 
                <head> 
                   <title>Recordatorio Contraseña</title> 
                </head> 
                <body> 
                    <h1>Recuperacion de contraseña'
;
    
$body .= '</h1><p><b>Aqui tienes tu nueva contraseña...bla bla bla bla</b>.</p>
            <p>Nueva contrasena:</p>'
;
    
$body .= $contrasena;
    
$body .= "</body></html>";
    
$mail->SetFrom("[email protected]");
    
$mail->AddAddress($emailValue);
    
$mail->Subject "recordatorio contraseña";
    
$mail->MsgHTML($body);
    
$mail->Send();

Al cargar la pagina y enviar la direccion de un usuario que ya existe en mi base de datos, no me da ningun error de php ni de mysql, pero tengo puesto que si la pagina no logra realizar la operacion me muestre un mensaje de 'intentelo mas tarde...' y siempre me sale !!!!!

Alguien ve algo raro?? Si hace falta un codigo mas completo lo pongo pero no quería agobiar mucho. un saludo amigos.
  #2 (permalink)  
Antiguo 01/08/2011, 11:15
Avatar de oso96_2000  
Fecha de Ingreso: junio-2002
Ubicación: Distrito Federal
Mensajes: 558
Antigüedad: 21 años, 10 meses
Puntos: 35
Respuesta: Pequeño error codigo - Contraseña aleatoria enviada por email

Seria bueno que pusieras la parte donde mandas el mensaje que te aparece.

Por otro lado, si la funcion te devuelve siempre una cadena aleatoria, ahi estas generando una contrasenia en plano y otra totalmente distinta encriptada. La forma correcta seria:


Código PHP:
Ver original
  1. $contrasena= SetRandomPassword();
  2.  
  3. // meto la con encrytada en variable
  4. $encriptada=md5($contrasena);

De este modo te aseguras que la contraseña encriptada corresponde a la que le llega al usuario en el correo.
__________________
Sin Ideas
  #3 (permalink)  
Antiguo 01/08/2011, 11:40
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Pequeño error codigo - Contraseña aleatoria enviada por email

Gracias por contestar oso96_2000, mira el form.php no es excesivamente amplio así que lo pongo un pelin resumido pero lo pongo tal cual, porque se que tiene que ser una tonteria pequeña.

Respecto de lo la contraseña encriptada, no era consciente de que estaba generando dos claves distintas!!! Menos mal que me lo has dicho!! Muchas gracias.

Código PHP:

<?php

include('funcion.php');

$contrasenaSetRandomPassword();

$encriptada=md5(SetRandomPassword());


$emailValue "";
$existEmail "";


$existeE 1;


//Validacion de datos enviados
if(isset($_POST['send'])){

    if(!
validateExistMail($_POST['email']))
        
$existEmail "error";

//Guardo valores para que no tenga que reescribirlos

$emailValue $_POST['email'];

//Compruebo si todo ha ido bien

        
if($existEmail == "error"){
            
$existeE 0;    
        }
        if (!
$existeE){
            
$status 0;
        }
        
}
?>

LA PARTE DEL FORMULARIO.

 <?php if(!isset($status)): ?>
     <form id="recoveryForm" name="recoveryForm" method="post" action="recover.php">
        <table cellspacing="0">
            <tr>
                <td><label for="email">Correo electrónico <?php
                                                         
if ($existEmail == "error"):
                                                             echo 
"Este correo ya existe"
                                                         else:
                                                             echo 
"Agrega un correo valido";
                                                         endif; 
?></label></td>
                 <td><input name="email" type="text" id="email" value="<?php echo $emailValue ?>"/></td>
 </tr>           
            <td></td>
           
                <td><input class="boton" type="submit" name="send" value="Recordar contraseña"/></td>
               
            </tr> 
        </table>
    
    </form>
    
    <?php else: ?>
    
 <?php 
                    
if(insertarNuevaClave($encriptada$emailValue)):?>
     <h1>Petición e contraseña realizada satisfactoriamente.</h1>

<?php enviarContrasena($emailValue,$contrasena); ?
<?
php else: ?>
                        
                        <h1 style="font-color: red">Error...Por favor intentalo un poco mas tarde.</h1>
<?php endif; ?>
            <?php endif; ?>
Lo que no he puesto antes en el archivo funciones es a la funcion que revisa si existe:
Código PHP:


function validateExistMail($mail){
        
        
$conn conectar();
        
$sql"select id_usuario from usuarios where email = '$mail'";
        
$resultado=mysql_query($sql,$conn) or die (mysql_error());
        if (
mysql_num_rows($resultado)>0)
            return 
false;
        else
            return 
true;
}

// lo tengo un poco raro porque es una funcion modificada mal, si existe usuario es false, osea que en el form si el email da 'error' en realidad es bueno, es que existe el correo. 
  #4 (permalink)  
Antiguo 01/08/2011, 12:59
 
Fecha de Ingreso: agosto-2011
Mensajes: 3
Antigüedad: 12 años, 9 meses
Puntos: 1
Respuesta: Pequeño error codigo - Contraseña aleatoria enviada por email

En la funcion enviarContrasena no estas devolviendo el resultado del envio.
fijate que te falta el return como ultima linea de dicha funcion
  #5 (permalink)  
Antiguo 01/08/2011, 13:55
 
Fecha de Ingreso: marzo-2011
Mensajes: 88
Antigüedad: 13 años, 1 mes
Puntos: 17
Respuesta: Pequeño error codigo - Contraseña aleatoria enviada por email

Hola a todos, primero daros las gracias por las molestias, se que cuando es una consulta donde se pone un codigo amplio, pues... como que da un poco de pereza... jejejej

Gracias al comentario de mmantaras, he decidido separar las funciones en unos archivos de prueba a ver cual era el problema, en la funcion para insertar la nueva clave aleatoria había un error que hasta de me da verguenza jejeje hacía el 'update' pero no devolvia nada, y el update no estaba bien hecho....

Aqui dejo la funcion por si alguien consulta este problema o le interesa la funcion o algo...

Código PHP:
function insertarNuevaClave($encriptada,$emailValue) {
    
$conn conectar();
    
$sql=  mysql_query("update usuarios set password='$encriptada' where email='$emailValue'");
    if (
$sql>0)
            return 
true;
        else
            return 
false;
    } 
Bueno pues eso es todo :) muchas gracias una vez mas.

Etiquetas: aleatoria, contraseña, email, html, mysql, sql, variables, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:07.