Foros del Web » Programando para Internet » PHP »

Cambiar contraseña usuario php

Estas en el tema de Cambiar contraseña usuario php en el foro de PHP en Foros del Web. Hola!!!!: Ufff, tengo la cabeza fatal de mirar tantos códigos. A ver si me podéis echar una mano. Quiero que si el usuario se olvida ...
  #1 (permalink)  
Antiguo 17/10/2012, 12:01
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años
Puntos: 2
Pregunta Cambiar contraseña usuario php

Hola!!!!:

Ufff, tengo la cabeza fatal de mirar tantos códigos. A ver si me podéis echar una mano. Quiero que si el usuario se olvida de la contraseña, pueda recuperarla a través de un correo que le envía una dirección url, pero me he quedado ahí. La contraseña original ha sido encriptada por md5.
Código PHP:
 <?php 
//Conexion con la base de datos y el archivo que contiene la funcion email
include("conexion.php"); $link Conectarse ();
//funcion que valida email
include('funcion.php');
    
//Si presionan el boton Enviar, ejecutamos el Script
    
if(isset($_POST['Enviar']))
        {
            
//Validacion por parte del servidor
            
if($_POST['email']!='' && valid_email($_POST['email'])==TRUE)
                {
                    
//Hacemos la consulta en la base de datos
                    
$query "SELECT usuario, email, contrasenna FROM usuarios WHERE email = '".($_POST['email'])."'";
                    
$getEmail mysql_query($query) or die(mysql_error());
                    
$row mysql_fetch_assoc($getEmail);
                    
$hash md5(md5($row['usuario']).md5($row['contrasenna']));
                    
//Componemos el mensaje
                    
$headers "From: animalmeeting.com \r\n";
                    
$headers .= "Reply-To: animalmeeting.com \r\n";
                    
$headers .= "X-Mailer: PHP/" phpversion();
                    
$subject "Peticion de Contraseña desde animalmeeting.com";
                    
$message "Querido " .$row['usuario']. "\r\n";
                    
$message .= "\r\n";
                    
$message "Para recuperar tu contraseña dar click en la url de abajo.
        http://www.tuweb.com/pass.php?id="
.$hash."&email=".$email."";
                   
                    
                    if(
mail($row['email'], $subject$message$headers))
                        {
                        
//Solo establecemos esta variable si el envio fue exitoso
                            
$exito 'La  nueva contrase&ntilde;a fue enviada a su direccion de correo electronico';
                        }
                    else
                        {
                            
$error 'El envio ha fallado, porfavor contacte al administrador sobre este problema';
                        }
                }
            else
                {
                    
$error 'Asegurese de que no ha dejado el campo vacio y que la direccion de correo electronica es una direccion de correo valida';
                }
        }
        
    if(isset(
$exito))
        {
            echo 
$exito;
        }
    else
        {
            echo 
$error;
//Solo mostramos el formulario si tenemos un mensaje de error
    
?>
    <form id="form" name="form" method="post" action="<?=$_SERVER['PHP_SELF']?>">
  <table width="300" border="1" cellspacing="0" cellpadding="0">
    <tr>
      <td width="45">Email:</td>
      <td width="194"><input name="email" type="text" id="email" value="<?php if(isset($_POST['email'])) { echo $_POST['email']; } ?>" size="32" /></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input name="Enviar" type="submit" id="Enviar" value="Enviar" /></td>
    </tr>
  </table>
</form>
<?php ?>
Ya en pass.php, no sé exactamente cómo lo tendría que hacer.

Imagino que un formulario que permita cambiar la contraseña mediante UPDATE, pero todo lo que he visto era introduciendo la contraseña anterior, cosa imposible en este caso.

Yo lo que quiero es recuperarla a través de otro dato, como el email o el nombre de usuario. Y, por supuesto, quiero que sólo ese usuario al que le he enviado el email se pueda meter en pass.php y cambiarla. Según esto, ¿cómo debería configurar pass.php?, ¿me podéis dar algún ejemplo? Gracias.
  #2 (permalink)  
Antiguo 17/10/2012, 12:22
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 9 meses
Puntos: 81
Respuesta: Cambiar contraseña usuario php

Tienes que agregar una tabla de paso para que cuando un usuario haya solicitado el cambio esta tenga sus datos con excepcion del password que tendra que llenar.

Una vez el vaya a la url, esta revisa solo en esa tabla, y si acierta a sus datos anteriores, cambias la pass por la que el haya ingresado.

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #3 (permalink)  
Antiguo 17/10/2012, 12:35
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años
Puntos: 2
Respuesta: Cambiar contraseña usuario php

¿Te refieres a crear una tabla temporal? He intentado entender muchos códigos respecto al tema expuesto (recuperar contraseñas), pero nunca leí que esas tablas fueran necesarias, de hecho, no las he usado anteriormente. ¿Conoces algún ejemplo por favor? Y gracias por contestar.
  #4 (permalink)  
Antiguo 17/10/2012, 16:51
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 4 meses
Puntos: 181
Respuesta: Cambiar contraseña usuario php

me demore 5 segundos buscandolo con google

http://www.celulaweb.net/2010/07/07/...n-php-y-mysql/


Adaptalo a tus necesidades.
__________________
Blog de humor http://elcuasatar.net63.net/
  #5 (permalink)  
Antiguo 17/10/2012, 18:02
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 19 años, 5 meses
Puntos: 88
Respuesta: Cambiar contraseña usuario php

creo que es mas simple de lo que parece, ejemplo yo estoy registrado y se me olvida la contraseña, lo que tengo que hacer es una solicitud de cambio de contraseña y para eso tengo que introducir mi nombre de usuario o email, si uso mi nombre de usuario se debe de verificar que sea un usuario registrado y tomar el email para enviarle el link donde pondra la nueva contraseña, si uso el email se debe de verificar que dicho email exista en la bd y enviar el link, si quieres obtimizarlo un poco puedes crear un campo de solicitud de cambio de tipo datetime(o como quieras) para poder controlar un tiempo para poder cambiar la contraseña de lo contrario se anula el link, si el usuario en este caso yo solicite cambiar la contraseña seguiré el link, de lo contrario no lo haré, en todo caso si ese mail no es seguro ese ya no es tu problema.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #6 (permalink)  
Antiguo 18/10/2012, 03:06
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años
Puntos: 2
Respuesta: Cambiar contraseña usuario php

Cuasatar y Eits, muchísimas gracias por contestar. Es muy gracioso, seguí buscando opciones para la recuperación de contraseña y precisamente me encontré con el enlace que me has dado Cuasatar, antes de que me lo enviaras Eso está bien, quiere decir que voy por el buen camino. Eits, ya hice lo que me comentaste en el comentario, pero ahí me quedaba, no sé si sería por el cansancio, pero me atranqué y ya no podía continuar. De todas formas, en principio, seguiré el enlace de cuasatar, que me ha resultado más entendible, aunque me he encontrado con un pequeño problema.
El mensaje se envía bien, con la nueva contraseña. Los caracteres en el asunto, antes de abrir el correo, aparecen correctos pero, una vez abierto, dichos caracteres (por ejemplo la ñ o los acentos) son modificados por estos símbolos: � . He probado diferentes maneras, he usado utf8_decode, pero no consigo que se quiten estos símbolos. Es un pequeño inconveniente, pero me mosquea. ¿Cómo puedo modificarlo para que no aparezca � en el asunto al abrir el email? Gracias.
Código PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <?php
    
include("conexion.php"); $link Conectarse (); // incluímos los datos de acceso a la BD
    
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
        
if(empty($_POST['usuario'])) {
            echo 
"No ha ingresado el usuario. <a href='javascript:history.back();'>Reintentar</a>";
        }else {
            
$usuario mysql_real_escape_string($_POST['usuario']);
            
$usuario trim($usuario);
            
$sql mysql_query("SELECT usuario, contrasenna, email FROM usuarios WHERE usuario='".$usuario."'");
            if(
mysql_num_rows($sql)) {
                
$row mysql_fetch_assoc($sql);
                
$num_caracteres "10"// asignamos el número de caracteres que va a tener la nueva contraseña
                
$nueva_clave substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                
$usuario $row['usuario'];
                
$contrasenna $nueva_clave// la nueva contraseña que se enviará por correo al usuario
                
$usuario_clave2 md5($contrasenna); // encriptamos la nueva contraseña para guardarla en la BD
                
$email $row['email'];
                
// actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                
mysql_query("UPDATE usuarios SET contrasenna='".$usuario_clave2."' WHERE usuario='".$usuario."'");
                
// Enviamos por email la nueva contraseña
               
                
$asunto utf8_decode("Recuperación de contraseña"); // Asunto (se puede cambiar)
                
$mensaje "Se ha generado una nueva contraseña para el usuario <strong>".$usuario."</strong>. <br>La nueva contraseña es: <strong>".$contrasenna."</strong>";
                 
$cabeceras "From: tuweb.com \r\n";
                 
$cabeceras .= "Reply-To: tuweb.com \r\n";
                 
$cabeceras $cabeceras."Content-Type: text/html; charset=utf-8\r\n"
                
$enviar_email mail($email,$asunto,$mensaje,$cabeceras);
                if(
$enviar_email) {
                    echo 
"La nueva contraseña ha sido enviada al email asociado al usuario ".$usuario.".";
                }else {
                    echo 
"No se ha podido enviar el email. <a href='javascript:history.back();'>Reintentar</a>";
                }
            }else {
                echo 
"El usuario <strong>".$usuario."</strong> no está registrado. <a href='javascript:history.back();'>Reintentar</a>";
            }
        }
    }else {
?>
    <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
        <label>Usuario:</label><br />
        <input type="text" name="usuario" id="usuario" /><br />
        <input type="submit" name="enviar" value="Enviar" />
</form>
<?php
    
}
?>
  #7 (permalink)  
Antiguo 18/10/2012, 07:19
Avatar de cuasatar  
Fecha de Ingreso: junio-2011
Ubicación: Bogotá Rock City
Mensajes: 1.230
Antigüedad: 13 años, 4 meses
Puntos: 181
Respuesta: Cambiar contraseña usuario php

No se si es que yo no se interpretar bien el manual de PHP pero a mi la función utf8_decode siempre me ha generado problemas. Quizas porque no se exactamente lo que significa esta línea y por eso uno comete el error al usar este comando.

Cita:
utf8_decode — Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 a un sencillo byte ISO-8859-1
Si alguien lo explica yo personalmente lo agradezco.

Por otro lado para solventar lo de los acentos y eso yo uso la chapuza de usar dos arreglos, uno con los acentos y otro con su entidad html y con str_replace los convierto. Por lo menos así lo hago yo y funciona. Igual si alguien conoce una mejor opción que nos comente.
__________________
Blog de humor http://elcuasatar.net63.net/
  #8 (permalink)  
Antiguo 18/10/2012, 10:48
 
Fecha de Ingreso: octubre-2011
Mensajes: 160
Antigüedad: 13 años
Puntos: 2
Respuesta: Cambiar contraseña usuario php

Hola!!! También me gustaría preguntar otra cosa de estos códigos. En el código para que el usuario cambie él mismo su contraseña, ocurre algo raro, ya que me envía el mensaje de "Contraseña cambiada correctamente.", pero, lo cierto, es que nada cambia en la base de datos. Es más, cuando vuelvo a logear al usuario, he de utilizar la contraseña antigua, ya que la nueva no se ha registrado. Me imagino que el problema está en que los password se insertan en la bd encriptados a través de md5, pero no estoy segura de cómo solucionarlo. Por último destacar que los datos se ingresan en la tabla "usuarios" y en el campo "contrasenna", por si influye en algo.
Código PHP:
<?php include("conexion.php"); $link Conectarse (); // incluímos los datos de conexión a la BD
session_start();
?>
<?php
if(isset($_SESSION['USUARIO'])) { // comprobamos que la sesión esté iniciada
    //realizamos la comprobacion de los datos
        
if(isset($_POST['enviar'])) {
            if(
$_POST['clave'] != $_POST['repcontrasenna']) {
                echo 
"Las contraseñas ingresadas no coinciden. <a href='javascript:history.back();'>Reintentar</a>";
            }else {
                
$usuario $_SESSION['usuario'];
                
$clave mysql_real_escape_string($_POST["clave"]);
                
$contrasenna md5($clave); // encriptamos la nueva contraseña con md5
                
$sql mysql_query("UPDATE usuarios SET contrasenna='".$contrasenna."' WHERE usuario='".$usuario."'")or die(mysql_error());
                if(
$sql) {
                    echo 
"Contraseña cambiada correctamente.";
                }else {
                    echo 
"Error: No se pudo cambiar la contraseña. <a href='javascript:history.back();'>Reintentar</a>";
                }
            }
        }else {
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <form action="<?=$_SERVER['PHP_SELF']?>" method="post">
            <label>Nueva contraseña:</label><br />
            <input type="password" name="clave" maxlength="15" /><br />
            <label>Confirmar:</label><br />
          <input type="password" name="repcontrasenna" maxlength="15" /><br />
            <input type="submit" name="enviar" value="Enviar" />
        </form>
<?php
}
    }else {
        echo 
"Acceso denegado.";
    }
?>

Etiquetas: cambiar_contraseña_email, md5, php+bd
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 14:50.