Comunidad de diseño web y desarrollo en internet online

Recuperación de Password con PHP

Citar            
MensajeEscrito el 29 Nov 2010 11:05 pm
Hola mis estimados. Estoy con un problema a la hora de recuperar el password del usuario desde la base de datos. El script es el siguiente:

Código PHP :

<?php
require_once("conexion.php");
$rut=$_POST['rut']; 
$correo=$_POST['correo']; 
$res=mysql_query("SELECT COUNT(*) FROM usuarios WHERE rut='$rut' AND correo='$correo'"); 
if (mysql_num_rows($res)==0) { 
header("Location:../reg/recu-er.html"); 
} 
else { 
$res=mysql_query("SELECT * FROM usuarios WHERE rut='$rut' AND correo='$correo'"); 
$row=mysql_fetch_assoc($res); 
$password=$row['password']; 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
mail($password, "Recuperación", "Estimado Usuario. El Password asociado a su cuenta es el siguiente: $password", $headers); 
} 
?> 

Este script me arroja el siguiente error en mi pc con Xampp:

Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\xampp\htdocs\regline\php\recu.php on line 15

Al probarlo en mi servidor de pago sólo me aparece una ventana en blanco pero no envía el correo.

¿Cuál sería el problema? Probé habilitando en php.ini la función sendmail_from y escribiendo un correo válido y nada, sigue con el mismo error.

De antemano muchas gracias.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 01 Dic 2010 05:12 am
Tienes un servidor SMTP instalado? Podrias usar la clase PHPMailer para enviar mails. Saludos

Por bucle_infinito

Claber

166 de clabLevel

1 tutorial

 

.NET Developer

firefox
Citar            
MensajeEscrito el 01 Dic 2010 08:32 pm
Gracias bucle_infinito por contestar. En la primera prueba había olvidado activar Mercury. Con el SMTP activado php me lanza el siguiente error:

Warning: mail() [function.mail]: SMTP server response: 503 No valid recipients specified. in...

El problema está en la línea:

Código PHP :

mail($correo, "Recuperación", "Sus datos en nuestra web son Rut Estudiante: $rut, Password: $password", $headers); 

Tengo la impresión de que no está reconociendo la variable $correo y por eso me dice que los recipientes especificados no son válidos. He realizado varias pruebas y sigo sin dar con el error. En mi servidor de pago sólo me muestra una página en blanco, supongo que debe tener desactivados los mensajes de error.

De antemano nuevamente gracias por la ayuda.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 06 Dic 2010 04:36 am
Saludos... He revisado y corregido mi código buscando la solución y aún no doy con ella. Al menos he logrado lo siguiente: En caso de que los datos introducidos sean correctos, arroja el mensaje de que el password ha sido enviado al correo. En caso de que sean incorrectos, envía a una página donde indica error de rut o correo con los campos para reintroducir los datos. El problema es que el correo no llega. Lo probé en mi servidor de pago y en mi servidor local (Xampp + Mercury) y en ambos sucede lo mismo, los mensajes funcionan bien pero el correo con el password no llega. El código lo dejé de la siguiente forma:

Código PHP :

<?php
require_once("conexion.php");
$sql = "select * from usuarios where rut = '". mysql_real_escape_string ($_POST['rut'])."' and correo = '".mysql_real_escape_string ($_POST['correo'])."' limit 1";
$resultado = mysql_query($sql) or die (mysql_error());
$data = mysql_fetch_array($resultado);
if($data==0) { header('Location: ../reg/recu-er.html'); }
else
$res = mysql_query ("select * from usuarios where rut='$rut' AND correo='$correo'");  
$row = mysql_fetch_assoc ($res);
$password = $row['password'];
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
mail($correo, "Recuperación", "Estimado Usuario. El Password asociado a su cuenta es el siguiente: $password", $headers);  
header('Location: ../reg/recu-ok.html');
?>

Asumo que el código no contiene ningún error de sintaxis pues no me arroja ningún error ni en local ni en mi servidor de pago. ¿Alguna idea de por qué no llega el correo con el password?

¡Ayuda por favor que me estoy quebrando la cabeza con este asunto!

De antemano muchas gracias por la vuena voluntad de al menos leer el post.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 06 Dic 2010 05:49 am
La variable $correo no tiene ningún valor. Creo que has querido hacer...

Código PHP :

$row = mysql_fetch_assoc ($res); 
$correo = $row['correo']; 
$password = $row['password']; 

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 06 Dic 2010 06:51 am
Gracias DriverOp otra vez por la ayuda. Con tu sugerencia el script quedaría así ¿verdad?

Código PHP :

<?php
require_once("conexion.php");
$sql = "select * from usuarios where rut = '". mysql_real_escape_string ($_POST['rut'])."' and correo = '".mysql_real_escape_string ($_POST['correo'])."' limit 1";
$resultado = mysql_query($sql) or die (mysql_error());
$data = mysql_fetch_array($resultado);
if($data==0) { header('Location: ../reg/recu-er.html'); }
else
$res = mysql_query ("select * from usuarios where rut='$rut' AND correo='$correo'");  
$row = mysql_fetch_assoc ($res);
$correo = $row['correo']; 
$password = $row['password'];
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
mail($correo, "Recuperación", "Estimado Usuario. El Password asociado a su cuenta es el siguiente: $password", $headers);  
header('Location: ../reg/recu-ok.html');
?>

Sin embargo, sigue sin enviar el correo. Hasta donde entiendo le estoy diciendo a php que "seleccione de la tabla usuarios el rut y el correo" (antes consultados a través del formulario por $_POST) y que asocie ese correo con el password al poner en ambos la variable "$row" ¿Estoy en lo correcto? De ser así, luego debería decirle que a ese mismo correo le envíe el password que le corresponde. El problema es que así como está no lo hace. Sigue enviándome a la página donde le digo al usuario que el pass ha sido enviado al correo pero dicho correo no llega y no logro dar con el error.

Gracias una vez más por venir al rescate.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 06 Dic 2010 12:32 pm
He llegado a la conclusión que no tienes experiencia programando. No pasa nada, nadie nace sabiendo.

Código PHP :

require_once("conexion.php"); 
$correo = mysql_real_escape_string (@$_POST['correo']);
$rut = mysql_real_escape_string (@$_POST['rut']);
$sql = "select * from usuarios where rut = '".$rut."' and correo = '".$correo."' limit 1"; 
$resultado = mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($resultado) == 0) { // Si no hay resultados...
   header('Location: ../reg/recu-er.html'); 
   exit; // No es necesario continuar a partir de aquí.
}
// Si llegó acá es que hay datos en la DB.
$row = mysql_fetch_assoc ($resultado); 
$correo = $row['correo'];  
$password = $row['password']; 
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"; 
mail($correo, "Recuperación", "Estimado Usuario. El Password asociado a su cuenta es el siguiente: $password", $headers);   
header('Location: ../reg/recu-ok.html'); 

No era necesario ejecutar dos consultas SQL, la primera es suficiente para obtener los datos que te interesan.
No era necesario volver a traer el correo ya que lo tienes desde POST.
Para saber si existe el 'rut' y el 'correo' bastaba con saber cuántos registros devolvía la consulta.
Una vez que haces un header("location...) no hace falta seguir ejecutando.
El único dato que te faltaba recuperar del registro de la DB era 'password'.
Aún así la función podría no funcionar si está deshabilitada.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 09 Dic 2010 07:40 pm
Muchas gracias DriverOp. Ha funcionado a la perfección. Es verdad que mi experiencia es poca en lo que es php. Hasta el momento había pasado la mayor parte del tiempo aprendiendo flash y había dejado "para después" el php. Ahora como estoy regresando al html y al css de pronto me vi obligado a usarlo y por eso me he visto pillado en cosas como ésta. Ahora, lo importante es aprender y con estos quebraderos de cabeza se aprende, aunque sea a martillazos... Jajajajaja...

Muchas gracias por la ayuda y la buena voluntad.

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 10 Dic 2010 07:09 am
Y bueno, después de varios quebraderos de cabeza y a la ayuda de DriverOp ya terminé mi recuperación de Password. Dejo el script final por si a alguien le sirve. Modifiqué la línea del mail para que el correo llegue en formato html.
:cool:

Código PHP :

<?php
require_once("conexion.php");
$correo = mysql_real_escape_string (@$_POST['correo']);
$rut = mysql_real_escape_string (@$_POST['rut']);
$sql = "select * from usuarios where rut = '".$rut."' and correo = '".$correo."' limit 1";
$resultado = mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($resultado) == 0) { 
   header('Location: recu-er.html');     
   exit; 
} 
$row = mysql_fetch_assoc ($resultado);  
$correo = $row['correo'];
$password = $row['password'];
$headers = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
$headers .= "From: Nombre-del-Sitio <[email protected]>\r\n"; 
$mensaje = '
<html>
<head>
<title>Recuperación de Password</title>
<style type="text/css">
.style-cont {
   font-family:"Palatino Linotype";
   font-size:12px;
}
.style-logo {
   text-align:center;
   margin-bottom:20px;
}
</style>
</head>
<body>
<div id="logo" class="style-logo">
   <img src="http://www.dominio.cl/img/logop.png" alt="Descripción de la imagen">
</div>
<div id="contenido" class="style-cont">
<p><strong>Estimado Usuario</strong></p>
<p>Se ha generado una solicitud de Recuperación de Password desde nuestro Sitio Web. 
Si usted no ha solicitado este mensaje, por favor ignórelo. Si sigue recibiéndolo contáctenos 
a <strong>[email protected]</strong>.</p>
<p>El Password asociado a su cuenta de usuario es: <strong>'.$password.'</strong>.</p>
<p>Atentamente le saluda,</p>
<p><strong>Nombre del Sitio<strong></p>
</div>
</body>
</html>
';
mail($correo, "Recuperación de Password", $mensaje, $headers);    
header('Location: recu-ok.html');  
?>

Nos vemos en otro post porque de seguro seguiré molestando. Jajajajaja... Porque la idea es aprender haciendo ¿no?

Saludos a todos los amigos de Cristalab.
:wink:

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 19 Oct 2011 01:55 pm
olle como esta creada tu base de datos

Por nicolay

0 de clabLevel



 

chrome
Citar            
MensajeEscrito el 19 Oct 2011 08:31 pm
Saludos, podrías ser un poco más específico respecto de la base de datos. En todo caso, para las pruebas del script usé sólo una tabla con los campos "rut" "password" y "correo". El proyecto real, por razones de tiempo recién lo estoy desarrollando ahora, pero estoy en la fase de diseño del sitio web y aún no llego a la base de datos. Lo bueno es que al menos con todas las pruebas que hice antes y en el último tiempo tengo gran parte de trabajo adelantado. :D

Paz y bien!!!

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 19 Oct 2011 08:33 pm
Si te puedo ayudar con algo sólo avísame. :D

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie8
Citar            
MensajeEscrito el 24 Nov 2011 05:47 pm
Ola amigo oye una pregunta, funciono tu script de manera local, es decir si envia los mails cuando esta utilizando tu computadora como servidor, eso es lo qe no me queda muy claro, porque aun no lo publico pero si me dice mensaje enviado pero nada, entonces me imagine que cuando lo manejas en un servidor externo debe de funcionar a la perfeccion.

Por azuz

1 de clabLevel



 

msie7
Citar            
MensajeEscrito el 24 Nov 2011 08:53 pm
Hola azuz, eso dependería de cómo tienes configurado tu servidor local. En mi caso uso Xampp que viene con Mercury como gestor de correo, sin embargo, hay que configurarlo con una cuenta de correo real, por ejemplo, con gmail y ahí "en teoría" funciona. Cuando comencé con esto (si te das cuenta, el post en 5 días cumple un año) intenté configurar Mercury pero sin resultados positivos, de modo que dejé de lado el tema de los correos en local. Y respondiendo a tu pregunta, claro, en local (mi pc) no funciona pero en el servidor sí (siempre y cuando tenga soporte para php y sql). Así como está recuerdo que funcionaba genial. Ahora, después de casi un año he optado por enviar un código de verificación y que el usuario cree una contraseña nueva.

Saludos!!!

:cool:

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie
Citar            
MensajeEscrito el 24 Nov 2011 09:03 pm
Hola gracias por tu respuesta, si creo ke eso es lo que pasa en mi servidor local no me funciona,tambien utilizo mercury entonces lo de la configuracion ya lo hice con una cuenta real de hotmail,le configure el servidot smtp de windows live, sin embargo no se si esto importe cuando sean cuentas de otro dominio, de hecho eso me paso en otro proyecto no se enviaba el mail pero en un servidor externo si , pero en aquel no utilizaba mercury, bueno voy a checarlo en un servidor externo y te cuento gracias

Por azuz

1 de clabLevel



 

chrome
Citar            
MensajeEscrito el 24 Nov 2011 09:15 pm
Dale, estoy seguro que en un servidor externo que soporte PHP no tendrás problemas.

:cool:

Por eareddhel

83 de clabLevel



Genero:Masculino  

msie

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.