Ver Mensaje Individual
  #6 (permalink)  
Antiguo 16/08/2009, 10:34
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

Seguimos entonces. he empezado a comentar el código que vamos trabajando para que se entienda mejor.

Ahora, antes de seguir, la última parte del código te va a dar un warning porque no encontará el recordset para vaciarlo. Si envías el formulario se va el error porque el recordset sólo se ejecutará cuando se envía el formulario. Lo puedes dejar así por ahora pero ese código lo moveremos cuando acabemos.

Ahora, vamos a crear una nueva tabla para almacenar el código de seguridad que se le envía a la persona a su email. Si este código no se puede cambiar el email. Yo he hecho una tabla sencilla llamada "recordar_pass" para esto. Estos son los campos:

1- id_recordar_pass (int) - Id de la tabla, auto-incremental.
2- email_recordar_pass (varchar) - email.
3- codigo_recordar_pass (varchar) - código.
4- timestamp_recordar_pass (bigint) - Timestamp UNIX por si acaso necesitas que los códigos se venzan después de un tiempo.
5- fecha_recordar_pass (datetime) - Algo que no es necesario, pero a mí siempre me gusta almacenar la fecha cuando se almacena cualquier dato en la base de datos.

así se ve en PHPMyAdmin:



Una vez este lista la tabla podemos hacer el Insert y enviar el email. Podemos usar el insert de DW para que nos genere el código (siendo este el foro de editores web trato de usar el las funciones del editor lo más posible). Haces un Insert usando el mismo formulario que tienes en la página:



El único campo que tienes especificar es el de email. El ID se pondra automático porque es auto-incremental y los otros valores los crearemos manualmente.



Una vez creado el insert podemos borrar lo que no necesitamos. De esto:

Código php:
Ver original
  1. $editFormAction = $_SERVER['PHP_SELF'];
  2. if (isset($_SERVER['QUERY_STRING'])) {
  3.   $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
  4. }
  5.  
  6. if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  7.   $insertSQL = sprintf("INSERT INTO recordar_pass (email_recordar_pass) VALUES (%s)",
  8.                        GetSQLValueString($_POST['email'], "text"));
  9.  
  10.   mysql_select_db($database_conn_pruebas_local, $conn_pruebas_local);
  11.   $Result1 = mysql_query($insertSQL, $conn_pruebas_local) or die(mysql_error());
  12. }

solo necesitamos esto:

Código php:
Ver original
  1. $insertSQL = sprintf("INSERT INTO recordar_pass (email_recordar_pass) VALUES (%s)",
  2.                    GetSQLValueString($_POST['email'], "text"));
  3.  
  4. mysql_select_db($database_conn_pruebas_local, $conn_pruebas_local);
  5. $Result1 = mysql_query($insertSQL, $conn_pruebas_local) or die(mysql_error());

También puedes borrar el campo oculto 'MM_insert' ya que nao lo estaremos usando.



Ahora vamos a ver si hubo un resultado del recordset del email. DW siempre crea con todo recordset la variable $totalRows_(el nombre de tu recorset) la cual contiene el número de resultados del mismos. En mi caso, mi recordset es Recordset1, osea, la variable se llama '$totalRows_Recordset1'. Si esta variable es igual a 1 sabemos que el email está en la base de datos. Yo usualmente uso la expresión, "si es mayor que cero (0') en estos casos. Sabiendo esto hacemos una condicional según lo que muestre la variable después de nuestro recordset:

Código php:
Ver original
  1. //si se envia el formulario
  2. if(!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 de datos
  16.     if($totalRows_Recordset1 > 0){
  17.        
  18.     }
  19.     //si no existe
  20.     else $error = 'Este email no existe en la base de datos';
  21. }

Aquí, si la variable es mayor que 0 ejecutaremos el codigo que queramos. Si no es así almacenamos el error en una variable para mostrarla después al usuario.

Creo que hasta aquí tenemos bastante para el segundo paso. Puedes probar si todo funciona dando echo a las variables así:

Código php:
Ver original
  1. //si el email existe en la base de datos
  2. if($totalRows_Recordset1 > 0){
  3.     echo 'el email existe';
  4. }
  5. //si no existe
  6. else echo $error = 'Este email no existe en la base de datos';

si todo está bien, se mostrarán los mensajes correspondientes.
__________________
Por fin.. tengo algo parecido a un blog
Y por lo visto ya estoy escribiendo...