Foros del Web » Programando para Internet » PHP »

Formulario recuperar pass. ¿que falla?

Estas en el tema de Formulario recuperar pass. ¿que falla? en el foro de PHP en Foros del Web. Buenas a todos. Tengo un pequeño formulario para recuperar un pass olvidado. Está hecho en php de forma que toma una variable(en este caso el ...
  #1 (permalink)  
Antiguo 10/11/2008, 17:31
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Formulario recuperar pass. ¿que falla?

Buenas a todos. Tengo un pequeño formulario para recuperar un pass olvidado. Está hecho en php de forma que toma una variable(en este caso el correo del usuario) y la comprueba en una base de datos para más tarde enviar a un correo con el resto de datos. Es bastante sencilla, pero aun así no consigo ver el fallo. Pongo los códigos para ver quien es el erudito que descubre el fallo. Ahí van:

El formulario llamado recuperacion.php

Código HTML:
<html> 
<head> 
    <title>Recuperar contraseña</title> 
    <style type="text/css">  
    </style> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"></head> 
<body> 
<h1 class="Estilo8">Recuperar contrase&ntilde;a </h1>
<form action="recuperandopass.php" method="POST"> 
<table align="left" width="225" cellspacing="2" cellpadding="2" border="0"> 
<tr> 
    <td colspan="2" align="center"  
    <?if ($_GET["errorusuario"]=="si"){?> 
        bgcolor=red><p><span style="color:ffffff"><b>Datos incorrectos</b></span></p> 
      <p><span class="Estilo1">El dato es incorrecto .</span><?}else{?> 
      bgcolor=#cccccc>Introduce tu clave de acceso</p> 
      <p><span class="Estilo1"> Si no est&aacute; registado vaya a <span class="Estilo10">Registrarse</span></span></p> <?}?></td> 
</tr> 
<tr> 
    <td width="61" align="right"><div align="left"><span class="Estilo9">Mail:</span></div></td> 
    <td width="150"><div align="right">
      <input type="Text" name="mail" size="25" maxlength="50">
    </div></td> 
</tr> 
<tr> 
    <td colspan="2" align="center">
        <div align="center">
          <input type="Submit" value="COMPROBAR">
        </div></td></tr> 
<tr> 
  <td colspan="2" align="center"><div align="center"><span class="Estilo3"><a href="registro.php">Registrarse</a></span></div></td> 
</tr> 
</table> 
</form> 
</body> 
</html> 
el archivo que procesa la variable del formulario y hace la consulta es
recuperandopass.php

Código PHP:
<?php 
// Este fichero recibe y procesa los datos del formulario de recuperacion de contraseña 
// en el que se escriben usuario y email 
// recogemos las variables enviadas por el formulario  
$mail=$_POST['mail_usuario']; 
//conecto con la base de datos  
$conn mysql_connect("localhost","++++","++++");  
//selecciono la BBDD  
mysql_select_db("aerotechdb",$conn); 
// Consultamos si existe $nombre_usuario + $mail_usuario 
$res=mysql_query("SELECT mail_usuario FROM mi_db WHERE mail_usuario='$mail'"); 
if (
mysql_num_rows($res)==0) { 
// Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion 
header("Location: recuperacion.php?errorusuario=si"); 

else { 
// Si existe, buscamos en la bd 
$res=mysql_query("SELECT mail_usuario FROM mi_db WHERE mail_usuario='$mail'"); 
$row=mysql_fetch_assoc($res); 
$contrasena=$row['clave_usuario'];
header ("Location: .../graciasrecuperacion.php");

// enviamos el email de recuperacion 
$headers "MIME-Version: 1.0\r\n"
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"
mail($mail"Recuperación de password""Sus datos en +++ son Nombre: $usuario, Contraseña: $contrasena. Muchas gracias por la consulta."$headers); 

?>
  #2 (permalink)  
Antiguo 10/11/2008, 17:36
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
Respuesta: Formulario recuperar pass. ¿que falla?

¿Cómo sabes que hay un error? ¿te muestra un mensaje? ¿no se guarda nada en la BD? ¿no envía el correo?

Con eso es más fácil saber qué estamos buscando.

Saludos,
  #3 (permalink)  
Antiguo 10/11/2008, 20:02
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Formulario recuperar pass. ¿que falla?

Que tal Xematick, verifica que no tengas errores en la consulta utilizando la función mysql_error()
ahora agrega estas lineas al inicio de tu script
Código PHP:
error_reporting(E_ALL);
ini_set('Display_errors'true); 

Para que veas los posibles errores que puedes tener en el script.


Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #4 (permalink)  
Antiguo 11/11/2008, 03:07
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Formulario recuperar pass. ¿que falla?

Se que tiene un error el sistema porque al rellenar el campo del formulario con un dato que si existe en la bd, deberia procesar el envio de correo, y lo que hace es que me devuelve error en el formulario, como si no existiera tal dato en la base de datos.

Código HTML:
<form action="recuperandopass.php" method="POST"> 
<table align="left" width="225" cellspacing="2" cellpadding="2" border="0"> 
<tr> 
    <td colspan="2" align="center"  
    <?if ($_GET["errorusuario"]=="si"){?> 
        bgcolor=red><p><span style="color:ffffff"><b>Datos incorrectos</b></span></p> 
      <p><span class="Estilo1">El dato es incorrecto .</span><?}else{?> 
      bgcolor=#cccccc>Introduce tu clave de acceso</p> 
      <p><span class="Estilo1"> Si no est&aacute; registado vaya a <span class="Estilo10">Registrarse</span></span></p> <?}?></td> 
</tr> 
Entonces no se donde está el error porque parece que en principio todo funciona. De todas formas voy a probar lo que dices carlojas y te comento. Muchas gracias.
  #5 (permalink)  
Antiguo 11/11/2008, 03:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Formulario recuperar pass. ¿que falla?

Carlojas, me da este error

Notice: Undefined index: mail_usuario in /www/htdocs/www.miweb.es/login/recuperandopass.php on line 7

Warning: Cannot modify header information - headers already sent by (output started at /www/htdocs/www.miweb.es/login/recuperandopass.php:7) in /www/htdocs/www.aerotechcullera.es/login/recuperandopass.php on line 16
  #6 (permalink)  
Antiguo 11/11/2008, 03:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Formulario recuperar pass. ¿que falla?

hola, si asumes que algo ya existe entonces obtienes estos problemas...

osea, si no hay variables GET/POST (etcétera) en tu script porque asumes que existen y las usas??

me refiero a que estas creyendo que existe una variable $_POST ¡¡sin enviar el formulario antes!!! ¿captas?

el problema es eso, como solución siempre verifica su existencia de toda variable antes de usarla...
Código PHP:
$mi_var = isset($otra_Var)? $otra_Varnull
así siempre estarás siendo coherente, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 11/11/2008, 03:20
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: Formulario recuperar pass. ¿que falla?

Hola,

Antes de un header no ha de haber ninguna salida al navegador, ya sea con codigo html o en echo de php.

Basta que solo tengas un espacio o un salto de linea antes de la etiqueta de apertura de php <?php

Un saludo
  #8 (permalink)  
Antiguo 11/11/2008, 07:51
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Formulario recuperar pass. ¿que falla?

Osea, según paketetrueke tendía que capturar en el formulario con mi script una variable GET/POST que no estoy capturando y que luego uso no? Es por eso por lo que no encuentra la variable y por tanto me devuelve "si" en la variable de error del formulario no?
Entonces, alguien me puede decir que incluyo en el código para que ruede como es devido? Si sois tan amables, esque soy un pollo aun...
  #9 (permalink)  
Antiguo 11/11/2008, 10:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Formulario recuperar pass. ¿que falla?

Xematick ... mira, se un poco inteligente... vale??

(nada de que quieres que te lo hagan, díganme que poner... ¿me pueden poner el código?)

el error que te dice ???

Cita:
Notice: Undefined index: mail_usuario in /www/htdocs/www.miweb.es/login/recuperandopass.php on line 7
ahora bien, o sabemos ingles... pero ahí viene el nombre del "indice indefinido", el nombre de archivo y linea... cierto???

entonces, siguiendo lo que te digo... que crees que esta pasando, según el error?



Código PHP:
$mail=$_POST['mail_usuario']; //  <- YA NOTASTE EL HORROR ??? (esta mal aqui)


// esta es una posible solución, no es para copy/paste
// así que debes ingeniártelas para razonarla.... :P (¿sabes?)
$foo = isset($bar)? $barnull
ahora, esta bien... estas pollo, pero no seas...!!!

(espero comprendas y te sepas servir)


suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 11/11/2008, 11:12
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Formulario recuperar pass. ¿que falla?

Bueno, lo primero de todo gracias a todos por intentar ayudarme con esto. Nunca he estudiado nada relacionado con PHP y no es mi campo tampoco. Me parece muy ético el no querer dar el trabajo masticado e intentar hacer ver que es mejor que se entienda que pasa.
Bueno pues, a ello vamos:

El error me indica que la variable no está definida. Me dice que el error está concretamente en la línea 7 (viendo el código que puse arriba está en la linea 5, pero le añadí lo que dijo carlojas asique por eso me dice que está en la linea 7). Y este es el código que tengo:

Código PHP:
<?php
error_reporting
(E_ALL); 
ini_set('Display_errors'true); 
// Este fichero recibe y procesa los datos del formulario de recuperacion de contraseña 
// en el que se escriben usuario y email 
// recogemos las variables enviadas por el formulario  
$mail=$_POST['mail_usuario']; 
//conecto con la base de datos  
$conn mysql_connect("localhost","++++","++++");  
//selecciono la BBDD  
mysql_select_db("aerotechdb",$conn); 
// Consultamos si existe $nombre_usuario + $mail_usuario 
$res=mysql_query("SELECT mail_usuario FROM mi_db WHERE mail_usuario='$mail'"); 
if (
mysql_num_rows($res)==0) { 
// Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion 
header("Location: recuperacion.php?errorusuario=si"); 

else { 
// Si existe, buscamos en la bd 
$res=mysql_query("SELECT mail_usuario FROM mi_db WHERE mail_usuario='$mail'"); 
$row=mysql_fetch_assoc($res); 
$contrasena=$row['clave_usuario'];
header ("Location: http://www.miweb.es/graciasrecuperacion.php");

// enviamos el email de recuperacion 
$headers "MIME-Version: 1.0\r\n"
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"
mail($mail"Recuperación de password""Sus datos en +++ son Nombre: $usuario, Contraseña: $contrasena. Muchas gracias por la consulta. $headers); 

?>
Asique según el mensaje de error, en la línea 7 donde pone:

Código PHP:
$mail=$_POST['mail_usuario']; 
es donde está el fallo, y el fallo es que en el formulario no se define ninguna variable como tal???
  #11 (permalink)  
Antiguo 11/11/2008, 11:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Formulario recuperar pass. ¿que falla?

tal ves... en primer lugar si, necesitas un control del formulario con el name="mail_usuario"

pero sobre todo, necesitas enviar el formulario!!

osea, ninguna variable externa se crea antes de ser usada y no debes asumir que ya existe...

el único modo en que existen es enviándolas por formulario (las POST) como sabes las GET viene en URL (o formulario)


es simple, el arreglo POST existe, siempre.... pero si no hay datos esta vacío ... vale?

suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #12 (permalink)  
Antiguo 11/11/2008, 11:34
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Formulario recuperar pass. ¿que falla?

Vale, ya he visto el fallo y ahora me da vergüenza no haberlo visto antes y haber sido tan pesado.... jejeje

El probema esque muchas veces no nos apetece pensar, pero te agradezco bastante el que me hallas invitado a pensar, que no es malo jejeje

Ademas he descubierto otro fallo en el form de forma que he corregido todo y queda asi:

Código PHP:
<?php
error_reporting
(E_ALL); 
ini_set('Display_errors'true); 
// Este fichero recibe y procesa los datos del formulario de recuperacion de contraseña 
// en el que se escriben usuario y email 
// recogemos las variables enviadas por el formulario  
$mail=$_POST['mail']; 
//conecto con la base de datos  
$conn mysql_connect("localhost","+++","+++");  
//selecciono la BBDD  
mysql_select_db("aerotechdb",$conn); 
// Consultamos si existe $nombre_usuario + $mail_usuario 
$res=mysql_query("SELECT mail_usuario FROM mi_db WHERE mail_usuario='$mail'"); 
if (
mysql_num_rows($res)==0) { 
// Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion 
header("Location: recuperacion.php?errorusuario=si"); 

else { 
// Si existe, buscamos en la bd ADEMAS HE ELIMINADO 2 LINES QUE NO TENIAN QUE VER CON LA CONSULTA JEJEJE
$res=mysql_query("SELECT mail_usuario FROM mi_db WHERE mail_usuario='$mail'"); 
header ("Location: http://www.miweb.es/graciasrecuperacion.php");

// enviamos el email de recuperacion 
$headers "MIME-Version: 1.0\r\n"
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n"
mail($mail"Recuperación de password""Sus datos en +++ son Nombre: $usuario, Contraseña: $contrasena. Muchas gracias por la consulta.$headers); 

?>
Pues eso, duda resuelta y lección aprendida XD
Gracias pateketrueke por todo
  #13 (permalink)  
Antiguo 11/11/2008, 12:30
 
Fecha de Ingreso: octubre-2008
Mensajes: 180
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Formulario recuperar pass. ¿que falla?

Vale, he cantado victoria demasiado pronto.
Si bien es cierto, el formulario funciona perfectamente. Incluso envia el correo al mail que introducimos depues de hacer la comprobacion en la base de datos y ver que existe tal correo. Pero claro, me envía el correo con el nombre usuario y clave vacios!!
Y no es de estrañar porque no defino en ningún momento las variables $usuario y $contrasena es decir, esta linea(al final del form):

Código PHP:
mail($mail"Recuperación de password""Sus datos en +++ son Nombre: $usuario, Contraseña: $contrasena. Muchas gracias por la consulta.$headers); 
envia al correo unas variables que no han sido definidas. Y entonces pregunto, para definir esas variables se hace así?:

Código PHP:
$ssql "SELECT * FROM mi_db WHERE nombre_usuario='$usuario' and clave_usuario='$contrasena'";
$usuario='nombre_usuario';
$contrasena='clave_usuario'
Gracias

Última edición por Xematick; 11/11/2008 a las 12:41
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 10:21.