Foros del Web » Programando para Internet » PHP »

recuperar contraseña olvidada

Estas en el tema de recuperar contraseña olvidada en el foro de PHP en Foros del Web. He encontrado este aporte y querría implementarlo en mi web. Como se puede ver el campo username lo quiero utilizar como campo de e-mail . ...
  #1 (permalink)  
Antiguo 02/06/2009, 13:11
 
Fecha de Ingreso: septiembre-2008
Mensajes: 185
Antigüedad: 16 años, 1 mes
Puntos: 1
recuperar contraseña olvidada

He encontrado este aporte y querría implementarlo en mi web.
Como se puede ver el campo username lo quiero utilizar como campo de
e-mail .

Un poco más abajo también comenta que las variables de conexion se suelen poner en un fichero de configuracion concretamente en include("config.php");

Querría preguntaros dos cuestiónes:

¿ Este código os parece correcto ? y la segunda cuestión ¿ que debo incluir exactamente en el config.php?

Haber si me podeis decir algo , solucionar este punto sería un gran avance
en la web




<?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


$nombreusuario=$_POST['username'];


// Conectamos a la base de datos

$con=mysql_connect('localhost','xxxxx','xxxx')or die ('Ha fallado la conexión: '.mysql_error());
mysql_select_db('base_ippcv')or die ('Error al seleccionar la Base de Datos: '.mysql_error());



// Las variables de conexion se suelen poner en un fichero de configuracion que se incluye

include("config.php");



// Consultamos si existe $nombreusuario + $emailusuario

$res=mysql_query("SELECT username FROM usuarios WHERE username='$username'");


if (mysql_num_rows($res)==0) {

// Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion

echo "Email no existe en la base de datos.";

}

else {

// Si existe, buscamos en la bd

$res=mysql_query("SELECT username,password FROM usuarios WHERE username='$username',password='$random'");
$row=mysql_fetch_assoc($res);

//Generar contraseña aleatoria

function generar_id($length)
{
$str = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLM NOPQRSTUVWXYZ";

for($i=0;$i<$length;$i++)
$key .= $str[mt_rand(0,strlen($str)-1)];

return $key;
}

$random = generar_id(15);


// enviamos el email de recuperacion

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
mail($email, "Recuperación", "Sus datos en nuestra web son: $username, $random, www.i.org", $headers);

$random=md5($random);

$query = "UPDATE usuarios
SET password = '$random' WHERE username ='$username' " ;
mysql_query($query) or die(mysql_error());

}

?>
  #2 (permalink)  
Antiguo 02/06/2009, 13:19
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 5 meses
Puntos: 1517
Respuesta: recuperar contraseña olvidada

todo lo que esta anterior al include debe ir dentro del include. Eso es si tu quieres ponerlo aparte y no tener que estar llamando en cada pagina toda esa informacion. Todo lo demas ve haciendolo y dinos si encuentras un error lo posteas y te vamos diciendo
  #3 (permalink)  
Antiguo 02/06/2009, 14:34
 
Fecha de Ingreso: septiembre-2008
Mensajes: 185
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: recuperar contraseña olvidada

De momento me salen estos dos fallos que corresponden a las siguientes lineas:

anexo: He eliminado el include y dejo las variables tal como estan en la página
recuperar.php

--------------------------------------------------------------------------------------------
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\ip\httpdocs\Templates\recuperar.php on line 42

Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in C:\wamp\www\ip\httpdocs\Templates\recuperar.php on line 63
----------------------------------------------------------------------------------------------

/ Si existe, buscamos en la bd

$res=mysql_query("SELECT username,password FROM usuarios WHERE username='$username',password='$random'");
$row=mysql_fetch_assoc($res); -42
---------------------------------------------------------------

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
username($username, "Recuperación", "Sus datos en nuestra web son: $username, $random, www.i.org", $headers); -63
-------------------------------------------------------------------------------

Última edición por jochite; 02/06/2009 a las 15:51
  #4 (permalink)  
Antiguo 02/06/2009, 14:55
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: recuperar contraseña olvidada

Eso te dice que hay un error en la consulta:
$res=mysql_query("SELECT username,password FROM usuarios WHERE username='$username',password='$random'");

Pones:
username='$username',password='$random'
Debes poner AND.
username='$username' AND password='$random'

Cita:
¿ Este código os parece correcto ?
No, no se filtran las variables que provienen de formulario. Eso es un gran riesgo ya que tu sistema es vulnerable a ataques de Inyeccion SQL. Tambien, algo que veo extremadamente INNECESARIO es:

Código php:
Ver original
  1. $res=mysql_query("SELECT username FROM usuarios WHERE username='$username'");
  2.  
  3.  
  4. if (mysql_num_rows($res)==0) {
  5.  
  6. // Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion
  7.  
  8. echo "Email no existe en la base de datos.";
  9.  
  10. }
  11.  
  12. else {
  13.  
  14. // Si existe, buscamos en la bd
  15.  
  16. $res=mysql_query("SELECT username,password FROM usuarios WHERE username='$username',password='$random'");
  17. $row=mysql_fetch_assoc($res);

¿Para que hacer 2 consultas? Si la 2da te puede decir si hubieron resultados o no.

Declaras la variable $random despues de usarla en una consulta.

El codigo esta mal en cuanto a logica (MUY MAL).

Yo digo que lo rehagas desde 0, pero antes, tomes un lapiz y un papel y pienses bien la logica de tu aplicacion. Te aseguro que si lo haces duraras menos tiempo escribiendo codigo y debbugeando.
  #5 (permalink)  
Antiguo 02/06/2009, 15:49
 
Fecha de Ingreso: septiembre-2008
Mensajes: 185
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: recuperar contraseña olvidada

Hasta el momento sólo me dá error en

Fatal error: Call to undefined function username() in C:\wamp\www\ip\httpdocs\Templates\recuperar.php on line 63

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
username($username, "Recuperación", "Sus datos en nuestra web son: $username, $random, www.i.org", $headers); -63
------------------------------------------------------------------------------------------

cuando comentas lo del ataques de inyección de sql se puede subsanar introduciendo en el siguiente apartado mysql_real_escape_string($username).
Diculpa mi inexperiencia en php
------------------------------------------------------------------------------------------
$res=mysql_query("SELECT username,password FROM usuarios WHERE username='$username' AND password='$random'");
$row=mysql_fetch_assoc($res);
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 21:53.