Foros del Web » Programando para Internet » PHP »

ayuda con: recuperar contraseña usuarios olvidadizos....

Estas en el tema de ayuda con: recuperar contraseña usuarios olvidadizos.... en el foro de PHP en Foros del Web. hola a todos, estoy armando un codigo para agregar a mi pagina... es un codigo de esos que si te olvidas la cotraseña, te manda ...
  #1 (permalink)  
Antiguo 14/12/2008, 17:56
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
ayuda con: recuperar contraseña usuarios olvidadizos....

hola a todos, estoy armando un codigo para agregar a mi pagina...
es un codigo de esos que si te olvidas la cotraseña, te manda un link con una pagina para poder reestablecerla...
el problema, es que no funciona bien...
les explico que hace: carga el formulario inicioal, agrega el mensaje de error y sae recarga indefinidamente.... osea... nunca termina...

que es lo que falla?????

se que estoy haciendo algo mal... les paso a mostrar el codigo:



Código PHP:
<?php
session_start
();

//conectamos a la BD
$dbhost='localhost'
$dbusername='user'
$dbuserpass='password'
$dbname='_propiedades'
$tabla='usuarios';
mysql_connect ($dbhost$dbusername$dbuserpass); 
mysql_select_db($dbname) or die('Cannot select database'); 


//funciones para quitar caracteres no permitidos
  
function clean_mail($mensaje
    {
     
$nopermitidos = array("'",'\\','<','>',"\"",";","$","%","&","/","|","{","}","[","]","+","#"," ");
     
$mail str_replace($nopermitidos""$mensaje);
     return 
$mensaje;
  }

  function 
clean_text($mensaje)
  {
     
$nopermitidos = array("'",'\\','<','>',"\"",";","$","%","&","/","|","{","}","[","]","+","#"," ","@");
     
$username str_replace($nopermitidos""$mensaje);
     return 
$mensaje;
  }
   
  function 
mysql_escape($cadena// funcion pasada por okram para limpiar campos escritos por usuarios
  
{                              // y aplicar mysql_real_escape_string a las variables y stripslashes si la magic cuotes estan activadas
     
if(get_magic_quotes_gpc() != 0
     {     
       
$cadena stripslashes($cadena);
     }
     return 
mysql_real_escape_string($cadena);
  } 
  
  function 
randomText($length) {   //FUNCION PARA CREAR UNA CLAVE ALEATORIA
    
$pattern "123456789PIUYTREWQASDFGHJKLMNBVCXZ123456789PLMK1IJNBHUYGVC123456789FTRDXZSEWAQWSDERFTGYHUJ123569876543ERDFREDESWQASWQASDGHGTY"
    for(
$i=0;$i<$length;$i++) { 
      
$key .= $pattern{rand(0,35)}; 
    } 
    return 
$key



//DIFERENCIACION DE ACCION DEL MAIL Y PRIMER INGRESO.

if (isset($_GET['id']))
{
  
$id $_GET['id'];
  
//obtengo los datos del usuario para mandar el email    
  
$result "SELECT * FROM usuarios WHERE aleatorio = '$id'";
  
$row mysql_fetch_array($query) or die ( mysql_error() );

  if (!isset(
$row['aleatorio'])){ 
    
$id=""
  }else{ 
    
$_SESSION['estado']="regenerar";
    
$_SESSION['id']=$id;
  }
}else{
  
$_SESSION['id']="";
  
$_SESSION['estado']="formulario";
}


//FORMULARIO DE REGENERACION DE CLAVE
if ($_SESSION['estado']=="formulario")

  if(empty(
$_POST['Login']))
  {

  
//FORMULARiO
  
?><form name="form_regenerate" method="post" action="<?=$PHP_SELF?>">
    <input type="hidden" name="date" value="<?=$datee?>" />
    <table border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#AA0000" >
      <TR><TD width="272">
        <table width="307" border="0" align="center" cellpadding="0" cellspacing="0" >
            <tr>
              <td height="29" colspan="2" align="left" bgcolor="#AA0000" background="../images/bg-titleblue.gif">&nbsp;<font color="#FFFFFF" face="Arial, Helvetica" size="3"><b>&nbsp;&nbsp;Inicio de sesi&oacute;n</b></font> </td> 
            </tr>
            <tr>
            <td colspan="2" align="center"><? echo $_SESSION["error"] ; ?></td>
          </tr>
            <TR>
            <TD width="137" height="37" align="left">&nbsp;&nbsp;Nombre de Usuario:</TD>
            <TD width="164" align="center" valign="middle"><INPUT maxLength="15" size="15" value=" <? echo $_SESSION['username'];?>" name="username"></TD>
          </TR>
            <tr>
            <td height="37" align="left">&nbsp;&nbsp;E-mail:</td>
              <td align="center" valign="middle"><input name="email" value="" size="25" maxlength="25" id="email" /></td>
            </tr>
            <TR>
              <TD height="37" colspan="2" align="center"><input name="Login" type="submit" value="Login" id="Login" /></TD>
            </TR>
          </table>
      </TD></TR>
    </table>
    </form>';<?
    
    $_SESSION
["error"]="";
  
  } 
   if(
$_POST['Login']=="Login");
  {
  
//SI ESTA MANDADO EN FORMULARIO Y NO ESTA SETEADO EL ESTADO - PRIMERA VERIFICACION

  
      
if ($_POST['email']!="" $_POST['username']!="")
      {
    
        
//limpiamos el mail 
        
$email clean_mail($_POST ['email']);
        
$_SESSION['email'] = $email
     
        
//limpiamos el usuario
        
$username clean_text($_POST ['username']);
        
$_SESSION['username'] = $username;
    
    
        
//consulta y validacion
        
if($_SESSION['email']!="" and $_SESSION['username']!=""
        {  
          
$query  "SELECT * FROM usuarios WHERE email='$email' AND nick='$username'";  //seleccionamos la informacion de la BD correspondiente al email del user
          
$row mysql_fetch_array($query) or die ( mysql_error() );
       
          
//compruebo que exista el password del email enviado
          
if (isset($row['clave']))  
          {  
            
$_SESSION['email'] = $row['email'];
            
$_SESSION['username'] = $row['nick'];//guardamos el usuario en una variable de sesion
            
$_SESSION['date'] = $_POST['date'];
            
$_SESSION['error']="";
            
$direccionaleatoria randomText(40);
            
$_SESSION['direccionaleatoria']= $direccionaleatoria;
            
//se sube a la db el codigo aleatorio.
            
$query "UPDATE usuarios SET aleatorio = '$direccionaleatoria' WHERE nick = '$username' and email ='$email' " ;
            
mysql_query($query) or die(mysql_error());   
                          
            
$_SESSION['estado']="registrado";        
          }else{
            
$_SESSION['error']="No existe ningun usuario registrado con esa direccion de mail. Intente Nuevamente.";
            
$_SESSION['estado']="formulario";
            
/*Header("Location:forgot.php");*/
            
echo'<script language="JavaScript"> document.location.href="forgot.php" </script>';
          }
        }else{
          
$_SESSION['error']="No existe ningun usuario registrado con esa direccion de mail. Intente Nuevamente.";
          
Header("Location:forgot.php");
            
$_SESSION['estado']="formulario";      
          echo
'<script language="JavaScript"> document.location.href="forgot.php" </script>';
        } 
      }else{
        
$_SESSION['error']="Ingrese el Usuario y el e-mail respectivo.";
        
$_SESSION['estado']="formulario";  
        
/*Header("Location:forgot.php");*/
         
echo'<script language="JavaScript"> document.location.href="forgot.php" </script>';
      }
    }
}

          
?>
  #2 (permalink)  
Antiguo 14/12/2008, 17:57
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: ayuda con: recuperar contraseña usuarios olvidadizos....

continuacion

Código PHP:
<?php
//ENVIO DE MAIL'S Y AVISO

if($_SESSION['estado']=="registrado")
{
  
  
//validacion y envio de mail's

        
@import_request_variables("gpc");
            
$youremail "mail"//YOUR MAIL HERE 
            
$subject "asunto"// TITLE OF DE SUBJECT IN MAIL
            
$redirect "?sec=inicio";//URL TO BE REDIRECTED IN 5 SECONDS
            
$secs "5";// TIME TO BE REDIRECTED
            
$username $_session['username'];
            
$email $_SESSION['email'];
            
$date $_SESSION['date'];
          $
$direccionaleatoria $_SESSION['direccionaleatoria'];
            
                        
         
//a partir de aquí hay una serie de variables que impiden que los spammers usen nuestro formulario como lanzadera de su spam 
          
$_SESSION['username'] = stripslashes($_SESSION['username']);
          
$headers .= "From: " $_SESSION['email']. "\r\n\r\n"
                  
//This is where the email is sent using your values from above. Be sure to update this if you change any fields in contact.php
                    
                   // Strip \r and \n from the email address
                // $_POST['email'] = preg_replace("\r", "", $_POST['email']);                // $_POST['email'] = preg_replace("\n", "", $_POST['email']);
                
                //*****COMMENT: if you have problems with the lines 40/41, replace these for:
                
$username str_replace("\r"""$username);
                
$email str_replace("\n"""$email);
        
        
// Remove injected headers
        
$find = array("/bcc\:/i","/Content\-Type\:/i","/cc\:/i","/to\:/i");
                
            
$username preg_replace($find""$username);
            
$email preg_replace($find""$email);
                    
            
//     
                
            
$username str_replace("\r","\n",$username); 
            
$email str_replace("\r","\n",$email);

             if (
eregi('^(bcc$|content-type|mime-version|--)',$key)){
                
print_error("Field nombres indicate exploit.");}//BLOCKING SPAM
        // Envio de mails
            
mail("$youremail""$subject","
                
                $date
                
                $username pidio el el cambio de contraseña, ante extravio.                
                se  le envio el siguiente link de regeneracion:
                
                <a href='http://www.sitio.com/forgot.php?id=$direccionaleatoria'>http://www.sitio.com/forgot.php?id=$direccionaleatoria</a>
                ---
                
                
                Este es un mail generado automaticamente, a modo de registro.
                
                Atte.
                sitio - Panel Administracion.
                
                
                "
,$headers);
                    
                    
                        
                
mail(" $email""$suject","
                $date
                
                Estimado/a $username, Recibimos su pedido de recambio de contraseña, ante extravio.
                
                ingrese a la siguiente pagina para proceder a la seleccion de una nueva contraseña:
                
                <a href='http://www.sitio.com/forgot.php?id=$direccionaleatoria'>http://www.sitio.com/forgot.php?id=$direccionaleatoria</a>
                ---
                
                
                "
,$headers);     
        
// Elimino session
        
session_unset(); 
        
session_destroy();
        
        echo
' se le envio un mail con la verificacion de identida para generar una nueva clave';

        
// Elimino session
        
session_unset(); 
        
session_destroy();
}
if(
$_SESSION["estado"]=="regenerando"){

$_SESSION["password"]=$_POST['pasword'];
$_SESSION["password2"]=$_POST['pasword2'];

 
$query "UPDATE usuarios 
        SET clave = '$passwordfinal' WHERE   usuario = '$username' and email ='$email' " 
;
        
mysql_query($query) or die(mysql_error());   

echo
' clave cambiada satisfactoriamente';

        
// Elimino session
        
session_unset(); 
        
session_destroy();
}

if(
$_SESSION['estado']=="regenerar"){
$_SESSION["estado"]="regenerando";

  echo
'<form name="form_regeneracion" method="post" action="'.$PHP_SELF.'">
 <input type="hidden" name="date" value="'
.$datee.'" />
  <table border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#AA0000" >
      <TR><TD width="272">
      <table width="307" border="0" align="center" cellpadding="0" cellspacing="0" >
    <tr>

      <td height="29" colspan="2" align="left" bgcolor="#AA0000" <? /*background="../images/bg-titleblue.gif"*/?> >&nbsp;<font color="#FFFFFF" face="Arial, Helvetica" size="3"><b>&nbsp;&nbsp;Inicio de sesi&oacute;n</b></font> </td>
      </tr>
    <tr>
        <td colspan="2" align="center">'
.$_SESSION["error"];$_SESSION["error"]="".'</td>
      </tr>
    <TR>
        <TD width="137" height="37" align="left">&nbsp;&nbsp;Nueva Contrase&ntilde;a:</TD>
        <td align="center" valign="middle"><input name="password" type="password" value="" size="15" maxlength="25" id="password" /></td>
      </TR>
    <tr>
        <td height="37" align="left">&nbsp;&nbsp;confirme nueva Contrase&ntilde;a:</td>
      <td align="center" valign="middle"><input name="password2" type="password" value="" size="15" maxlength="25" id="password2" /></td>
      </tr>
    <TR>
      <TD height="37" colspan="2" align="center"><input name="Login" type="submit" value="Login" id="Login" /></TD>
    </TR>
    </table>
      </TD></TR>
      </table>
    <p>&nbsp;</p>
  </form>'  
;
}
?>


aclaro: donde pongo para redirigir ?sec=forgot, es por que es un include en otra pagina.

Última edición por binagol; 14/12/2008 a las 19:16
  #3 (permalink)  
Antiguo 15/12/2008, 14:50
 
Fecha de Ingreso: agosto-2008
Ubicación: Buenos Aires
Mensajes: 247
Antigüedad: 15 años, 8 meses
Puntos: 6
Respuesta: ayuda con: recuperar contraseña usuarios olvidadizos....

alguna ideade que hago mal??????

muchas gracias... saludos
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 01:50.