Ver Mensaje Individual
  #15 (permalink)  
Antiguo 05/09/2009, 11:00
Avatar de juaniquillo
juaniquillo
Colaborador
 
Fecha de Ingreso: noviembre-2005
Ubicación: San Juan, Puerto Rico
Mensajes: 5.745
Antigüedad: 19 años
Puntos: 281
Respuesta: Olvide contraseña con Dreamweaver

Primero que nada, lo mejor es hacer unos cambios al sistema de error. En vez de:


lo mejor es poner:

Código php:
Ver original
  1. if(isset($_POST['email']) && !empty($_POST['email']))

Igual abajo.

Código php:
Ver original
  1. elseif(isset($_POST['email']) && empty($_POST['email'])) $error = 'Por favor escriba su email';

Así php primero vera si la variable está seteada y luego si está vacía. Tambié creo que el número secreto debería ser mas seguro, así que ambien le agregué el timestamp a la variable:

Código php:
Ver original
  1. //timestamp
  2. $timestamp = time() + (7 * 24 * 60 * 60);
  3. //numero secreto
  4. $numero_secreto = $timestamp.'-'.rand(10000, 90000);
  5. //fecha
  6. $fecha = date('Y-m-d');

Ahora si, seguimos. Yo siempre uso la librería phpMailer para el envío de emails, pero como eso ya es mas complicado usaremos la funcion mail() de php.

Debo recordarte que necesitas un servidor SMTP para poder enviar emails desde tu servidor, osea, que si no tienes instalado uno en tu servidor local no podrás probar este sistema. Si has contratado un servidor remoto lo más seguro tiene un servidor SMTP. Si es así mejor has las pruebas en ese servidor.

Ahora, Necesitaremos las siguientes variables:

Código php:
Ver original
  1. ////// se envia el email
  2. //email donde se enviara el mensaje
  3. $hacia_email = $_POST['email'];
  4. //email de donde sale el mensaje
  5. $email_desde = "[email protected]";
  6. //titulo del mensaje
  7. $titulo_mensaje = 'Mensaje enviado desde mipagina.com';
  8. //mensaje
  9. $mensaje = "Para cambiar su password haga click aqu&iacute;:<br />
  10. <a href=\"http://mipagina.com/nuevo_pass.php?id=$numero_secreto\">http://mipagina.com/nuevo_pass.php?id=$numero_secreto</a><br />
  11. ";
  12. $headers  = 'MIME-Version: 1.0' . "\r\n";
  13. $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  14. $headers .= 'From: '.$email_desde."\r\n";
  15. $headers .= 'Reply-To: '.$email_desde."\r\n";

En la variable '$email_desde' necesitas poner el email de donde quieres que salga el mensaje, el cual será el mismo al que se le podrá dar reply. También puedes cambiar el título del mensaje como el mensaje, pero necesitas enviar la dirección donde la persona cambiará su password. Entonces al final se envía el email. Si no se pudo enviar se muestra un error y si se pudo enviar le damos a la variable '$enviado' el valor de TRUE para no mostrar el formulario:

Código php:
Ver original
  1. //enviar email
  2. if(mail($hacia_email, $titulo_mensaje, $mensaje, $headers)) $enviado = TRUE;
  3. else $error = 'Hubo un erro al enviar el mensaje.';

De nuevo, vas a recibir este error si no tienes un servidor SMTP instalado:

Código HTML:
Warning: mail() [function.mail]: Failed to connect to mailserve...
Ahora te dejo el código completo:

Código php:
Ver original
  1. //si se envia el formulario
  2. if(isset($_POST['email']) && !empty($_POST['email'])){
  3.     //se regoge la variable POST
  4.     $colname_Recordset1 = "-1";
  5.     if (isset($_POST['email'])) {
  6.       $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_POST['email'] : addslashes($_POST['email']);
  7.     }
  8.     //recorset
  9.     mysql_select_db($database_conn_pruebas_local, $conn_pruebas_local);
  10.     $query_Recordset1 = sprintf("SELECT * FROM usuarios WHERE email = %s", GetSQLValueString($colname_Recordset1, "text"));
  11.     $Recordset1 = mysql_query($query_Recordset1, $conn_pruebas_local) or die(mysql_error());
  12.     $row_Recordset1 = mysql_fetch_assoc($Recordset1);
  13.     $totalRows_Recordset1 = mysql_num_rows($Recordset1);
  14.    
  15.     //si el email existe en la base dedatos
  16.     if($totalRows_Recordset1 > 0){
  17.         //timestamp
  18.         $timestamp = time() + (7 * 24 * 60 * 60);
  19.         //numero secreto
  20.         $numero_secreto = $timestamp.'-'.rand(10000, 90000);
  21.         //fecha
  22.         $fecha = date('Y-m-d');
  23.         //insert a la tabla del numero secreto
  24.         $insertSQL = sprintf("INSERT INTO recordar_pass (email_recordar_pass,codigo_recordar_pass,timestamp_recordar_pass,fecha_recordar_pass) VALUES (%s,%s,%s,%s)",
  25.             GetSQLValueString($_POST['email'], "text"),
  26.             GetSQLValueString($numero_secreto, "int"),
  27.             GetSQLValueString($timestamp, "int"),
  28.             GetSQLValueString($fecha, "date"));
  29.  
  30.         mysql_select_db($database_conn_pruebas_local, $conn_pruebas_local);
  31.         $Result1 = mysql_query($insertSQL, $conn_pruebas_local) or die(mysql_error());
  32.        
  33.         ////// se envia el email
  34.         //email donde se enviara el mensaje
  35.         $hacia_email = $_POST['email'];
  36.         //email de donde sale el mensaje
  37.         $email_desde = "[email protected]";
  38.         //titulo del mensaje
  39.         $titulo_mensaje = 'Mensaje enviado desde mipagina.com';
  40.         //mensaje
  41.         $mensaje = "Para cambiar su password haga click aqu&iacute;:<br />
  42.         <a href=\"http://mipagina.com/nuevo_pass.php?id=$numero_secreto\">http://mipagina.com/nuevo_pass.php?id=$numero_secreto</a><br />
  43.         ";
  44.         $headers  = 'MIME-Version: 1.0' . "\r\n";
  45.         $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
  46.         $headers .= 'From: '.$email_desde."\r\n";
  47.         $headers .= 'Reply-To: '.$email_desde."\r\n";
  48.        
  49. //enviar email
  50. if(mail($hacia_email, $titulo_mensaje, $mensaje, $headers)) $enviado = TRUE;
  51. else $error = 'Hubo un erro al enviar el mensaje.';
  52.        
  53.     }
  54.     //si no existe
  55.     else $error = 'Este email no existe en la base de datos';
  56. }
  57. //si el formulario esta vacio
  58. elseif(isset($_POST['email']) && empty($_POST['email'])) $error = 'Por favor escriba su email';

y el formulario con los cambios:

Código php:
Ver original
  1. <?php
  2. //si se ha enviado el email
  3. if($enviado != TRUE){
  4. //si hay error se muestra
  5. if(!empty($error)) echo $error;
  6. ?>
  7. <form id="form1" name="form1" method="POST" action="">
  8.   <table border="0" cellpadding="5" cellspacing="1" bgcolor="#999999">
  9.     <tr>
  10.       <td bgcolor="#CCCCCC">email</td>
  11.       <td bgcolor="#FFFFFF"><input name="email" type="text" id="email" value="<?php echo((isset($_POST["email"]))?$_POST["email"]:"") ?>" /></td>
  12.     </tr>
  13.     <tr>
  14.       <td colspan="2" bgcolor="#FFFFFF"><div align="center">
  15.         <input type="submit" name="button" id="button" value="enviar" />
  16.       </div></td>
  17.     </tr>
  18.   </table>
  19.   </form>
  20. <?php
  21. }else{?>
  22. <p>El mensaje ha sido enviado correctamente</p>
  23. <?php } ?>

Lo que queda es hacer la página que recibe al usuario y donde puede cambiar su password. Te sugiero que si vas a enviar emails los envíes desde el domain que usas en el email de salida o habrá la posibilidad de que tu IP se incluido en alguna lista de spam.

Bueno, espero que puedas probar el código. Me dices si tienes algún problema
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...