Foros del Web » Programando para Internet » PHP »

Cambio de Contraseña

Estas en el tema de Cambio de Contraseña en el foro de PHP en Foros del Web. Buen día maestros de la programación Ando un poco desesperado con algo, les explico: Tengo una pagina index.php en la cual los usuarios se loguean ...
  #1 (permalink)  
Antiguo 25/10/2013, 11:16
 
Fecha de Ingreso: septiembre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 1
Cambio de Contraseña

Buen día maestros de la programación

Ando un poco desesperado con algo, les explico:

Tengo una pagina index.php en la cual los usuarios se loguean con una cuenta de email y una contraseña, ahí tengo un enlace que dice "Olvido su contraseña?" el cual me redirige a una pagina cambiopass.php donde les pido en un formulario que introduzcan su email y hay un botón de enviar.

Que necesito:

que al ingresar el email y dar en el botón enviar se le envíe un correo a ese email que pusieron en el formulario.

Una vez abran el email, el mensaje del correo tenga un enlace que al pincharlo haga una actualización en el campo pass de la BD por un valor fijo (ejemplo: se actualice por 000000).

ya el usuario sabiendo que su nuevo pass es 000000 pueda loguearse y cambiar su pass por uno que el quiera.

Me explique bien?

PD: La parte de que después el usuario ya logueado pueda cambiar el pass si me queda más fácil hacerla, necesitaría ayuda con los otros puntos.

Espero su grandiosa colaboración y ayuda.


Gracias.
__________________
Víctor Soto
  #2 (permalink)  
Antiguo 25/10/2013, 11:28
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Cambio de Contraseña

Saludos,

Te recomiendo una búsqueda en internet sobre ¿cómo enviar un email con PHP? Vas a ver muchos tutoriales y hasta videos de como hacerlo.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 25/10/2013, 11:45
 
Fecha de Ingreso: septiembre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Cambio de Contraseña

He mirado varios ejemplos en internet pero al usarlo me da un error, por eso consulte aquí en el foro.
Además no he encontrado como a través de un enlace enviado a un correo se pueda actualizar un campo de una BD.


__________________
Víctor Soto
  #4 (permalink)  
Antiguo 25/10/2013, 12:01
Avatar de JJrb3  
Fecha de Ingreso: septiembre-2010
Mensajes: 51
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Cambio de Contraseña

Buenas tardes,

¿Como es tu codigo y que error te sale?
  #5 (permalink)  
Antiguo 25/10/2013, 12:14
 
Fecha de Ingreso: septiembre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Cambio de Contraseña

Buenas tardes,

El codigo php que uso es este y lo saque de un ejemplo que vi en internet y le hice las modificaciones que necesitaba.

<?php
$origen = "[email protected]";
$destino=$_POST['email']; -----------------> Esta es la linea 5
$asunto = "probando Envio de correo";
$mensaje = "haciendo una prueba. <br>";
$mensaje .= "<br><a href='http://www.google.com'>ir al enlace</a>";
$mensaje .= "<br>Cortesia de Cetro Investigaciones.";
$cabecera = "From:".$origen."\nReply-To:".$origen."\n";
$cabecera = $cabecera."X-Mailer:PHP/".phpversion()."\n";
$cabecera = $cabecera."Mime-Version: 1.0\n";
$cabecera = $cabecera."Content-Type: text/html";
mail($destino,$asunto,$mensaje,$cabecera);
echo "Correo Enviado";
?>

y el formulario que uso es este

<form id="form1" name="form1" method="post" action="cambiopass.php">
<p>
<label>E-mail<br />
<input name="email" type="text" size="30" />
</label>
</p>
<p>
<label>
<input name="Submit" type="submit" value="Enviar" />
</label></p>
</form>

este formulario lo pongo entre el <body>
El error que me sale es el siguiente:

Notice: Undefined index: email in C:\wamp\www\rsinvestigaciones\cambiopass.php on line 5

Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\wamp\www\rsinvestigaciones\cambiopass.php on line 18
__________________
Víctor Soto
  #6 (permalink)  
Antiguo 25/10/2013, 12:55
 
Fecha de Ingreso: febrero-2013
Mensajes: 78
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Cambio de Contraseña

Buenas , yo ya tengo mi sistema para recuperar contraseñas

asi q lo comparto :


y sobre lo de que quieres que al pincharle en el enlace del correo se te habra tu página cambiandole automáticamente a otra sobre lo que quieras que al pincharle al inlace ahorita q lo pienso lo veo simple , solamente cuando pongas el email , en tu código php sacas el nick o tu nombre del usuario que este registrado con dicho correo y mandas el enlace de tu página para que aparesca en tu correo pero le agregas el nick

osea q si pusiste un correo que SI existe entonces sacaras los datos de dicha persona

$email = $_POST['email'];

$sq = "SELECT * FROM usuarios WHERE email = '$email' ";
require("connectar.php"); <--- aqui llamas al archivo para que conecte con tu BD
$consu = mysql_query($sq);

while($row = mysql_fetch_assoc($consu))
{

$nick = $row['nick'];
}

entonces cuando manes el link
por ejemplo si tu página es : www.holaa.com

le envias el nick que sacaste respecto al correo
y envias la página y claro el archivo donde cambiara la contraseña automáticamente
supongamos que en el archivo para cambiar tu contra se llame cambiarcontra.php

entonces mandas el link con el nick en la url, osea asi

www.holaa.com/cambiarcontra.php?nick=<?php echo $Nick ?>

y entonces cuando vayas a tu correo y habras el link
se te habrira tu página

ahora en el archivo cambiarcontra.php chapas por GET el nick
y verificas que existe en la BD

y si existe , pasas a una parte donde automáticamente se te genere una contraseña nueva
(eso puedes buscarlo por internet , algún código que te genere una contraseña neva )
y luego haces un UPDATE según al nick que hayas recibido por GET

$nick = $_GET['nick'];
y actualizas la contraseña de ese nick

$sql = "UPDATE usuarios SET contra = 'aqui iria la nueva contra' WHERE nick = '$nick' ";

y listo lo muestras en un mensaje ahi mismo

que diga por ejemplo :

´´Su contraseña ah sido actualizada a esta : 000000
ya puede loguearse en la página y poder modificar su contraseña´´







aqui te paso mi código : y como deberias hacer :


Código PHP:
Ver original
  1. <?php
  2.  
  3. function verificar() {
  4.    
  5.     $email = $_POST['email'];
  6.    
  7.    
  8.     $reqlen   = strlen($email);
  9.    
  10.      if ($reqlen > 0)  {
  11.      
  12.    
  13.        $ssql = ("SELECT * FROM usuarios WHERE Email ='$email'");
  14.        
  15.        require("conectar.php");
  16.        $rs = mysql_query($ssql);
  17.        
  18.  
  19. $emailusuario=$_POST['email'];
  20.  
  21.        if (mysql_num_rows($rs)==1){
  22.      
  23.        $sql = ("SELECT  Nick FROM usuarios WHERE Email='$email'");
  24.        $row=mysql_fetch_assoc($rs);
  25.          $nombreusuario=$row['Nick'];
  26.      
  27.        
  28.        // enviamos el email de recuperacion
  29. $headers = "MIME-Version: 1.0\r\n";
  30. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
  31. mail($emailusuario, "Recuperación", "www.holaa.com/cambiarcontra.php?nick=$nombreusuario", $headers);
  32.  
  33. header("Refresh: 4; URL=http://www.holaa.com");
  34.     ?>
  35. <script type="text/javascript">
  36.  
  37.    
  38.    
  39.         jAlert("Se te envio un correo con tus datos").validate();
  40.        
  41.    
  42.    
  43. </script>
  44.  
  45. <?php
  46.  
  47.    
  48. }
  49. else
  50. {
  51.      ?>
  52.       <script type="text/javascript">
  53.  
  54.    
  55.    
  56.         jAlert("Datos incorrectos , este mail no esta registrado").validate();
  57.        
  58.    
  59.    
  60. </script>
  61.  
  62.  
  63.      <?php
  64.        }
  65.        }
  66.        
  67.        else
  68.        {
  69.        ?>
  70.        <script type="text/javascript">
  71.  
  72.    
  73.    
  74.         jAlert("Por favor llena el campo o no podremos ayudarte").validate();
  75.        
  76.    
  77.    
  78. </script>
  79. <?php
  80.       }
  81.          }
  82.          
  83.          ?>
  84.          
  85.     <div class="inicio">
  86.     <center><form action="" method="post" class="login">
  87.    
  88.     <div><label>Email&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label><input name="email" type="text"></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</center>
  89.    
  90.     <center><input name="sesionxd" type="submit" value="Enviar" id="enviar" class="button"></center>
  91.    
  92.     <p></p>
  93.    
  94.     <center><a href="index.html">Volver</a></center>
  95.     </div>
  96.    
  97.          
  98.        <?php
  99.    
  100.   if(isset($_POST['sesionxd'])) {
  101.  
  102.   verificar();
  103.  
  104.    
  105. }
  106. ?>
  #7 (permalink)  
Antiguo 25/10/2013, 15:44
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años
Puntos: 96
Respuesta: Cambio de Contraseña

Cita:
Iniciado por awik Ver Mensaje
Buenas , yo ya tengo mi sistema para recuperar contraseñas

asi q lo comparto :


y sobre lo de que quieres que al pincharle en el enlace del correo se te habra tu página cambiandole automáticamente a otra sobre lo que quieras que al pincharle al inlace ahorita q lo pienso lo veo simple , solamente cuando pongas el email , en tu código php sacas el nick o tu nombre del usuario que este registrado con dicho correo y mandas el enlace de tu página para que aparesca en tu correo pero le agregas el nick

osea q si pusiste un correo que SI existe entonces sacaras los datos de dicha persona

$email = $_POST['email'];

$sq = "SELECT * FROM usuarios WHERE email = '$email' ";
require("connectar.php"); <--- aqui llamas al archivo para que conecte con tu BD
$consu = mysql_query($sq);

while($row = mysql_fetch_assoc($consu))
{

$nick = $row['nick'];
}

entonces cuando manes el link
por ejemplo si tu página es : www.holaa.com

le envias el nick que sacaste respecto al correo
y envias la página y claro el archivo donde cambiara la contraseña automáticamente
supongamos que en el archivo para cambiar tu contra se llame cambiarcontra.php

entonces mandas el link con el nick en la url, osea asi

www.holaa.com/cambiarcontra.php?nick=<?php echo $Nick ?>

y entonces cuando vayas a tu correo y habras el link
se te habrira tu página

ahora en el archivo cambiarcontra.php chapas por GET el nick
y verificas que existe en la BD

y si existe , pasas a una parte donde automáticamente se te genere una contraseña nueva
(eso puedes buscarlo por internet , algún código que te genere una contraseña neva )
y luego haces un UPDATE según al nick que hayas recibido por GET

$nick = $_GET['nick'];
y actualizas la contraseña de ese nick

$sql = "UPDATE usuarios SET contra = 'aqui iria la nueva contra' WHERE nick = '$nick' ";

y listo lo muestras en un mensaje ahi mismo

que diga por ejemplo :

´´Su contraseña ah sido actualizada a esta : 000000
ya puede loguearse en la página y poder modificar su contraseña´´







aqui te paso mi código : y como deberias hacer :


Código PHP:
Ver original
  1. <?php
  2.  
  3. function verificar() {
  4.    
  5.     $email = $_POST['email'];
  6.    
  7.    
  8.     $reqlen   = strlen($email);
  9.    
  10.      if ($reqlen > 0)  {
  11.      
  12.    
  13.        $ssql = ("SELECT * FROM usuarios WHERE Email ='$email'");
  14.        
  15.        require("conectar.php");
  16.        $rs = mysql_query($ssql);
  17.        
  18.  
  19. $emailusuario=$_POST['email'];
  20.  
  21.        if (mysql_num_rows($rs)==1){
  22.      
  23.        $sql = ("SELECT  Nick FROM usuarios WHERE Email='$email'");
  24.        $row=mysql_fetch_assoc($rs);
  25.          $nombreusuario=$row['Nick'];
  26.      
  27.        
  28.        // enviamos el email de recuperacion
  29. $headers = "MIME-Version: 1.0\r\n";
  30. $headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
  31. mail($emailusuario, "Recuperación", "www.holaa.com/cambiarcontra.php?nick=$nombreusuario", $headers);
  32.  
  33. header("Refresh: 4; URL=http://www.holaa.com");
  34.     ?>
  35. <script type="text/javascript">
  36.  
  37.    
  38.    
  39.         jAlert("Se te envio un correo con tus datos").validate();
  40.        
  41.    
  42.    
  43. </script>
  44.  
  45. <?php
  46.  
  47.    
  48. }
  49. else
  50. {
  51.      ?>
  52.       <script type="text/javascript">
  53.  
  54.    
  55.    
  56.         jAlert("Datos incorrectos , este mail no esta registrado").validate();
  57.        
  58.    
  59.    
  60. </script>
  61.  
  62.  
  63.      <?php
  64.        }
  65.        }
  66.        
  67.        else
  68.        {
  69.        ?>
  70.        <script type="text/javascript">
  71.  
  72.    
  73.    
  74.         jAlert("Por favor llena el campo o no podremos ayudarte").validate();
  75.        
  76.    
  77.    
  78. </script>
  79. <?php
  80.       }
  81.          }
  82.          
  83.          ?>
  84.          
  85.     <div class="inicio">
  86.     <center><form action="" method="post" class="login">
  87.    
  88.     <div><label>Email&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</label><input name="email" type="text"></div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</center>
  89.    
  90.     <center><input name="sesionxd" type="submit" value="Enviar" id="enviar" class="button"></center>
  91.    
  92.     <p></p>
  93.    
  94.     <center><a href="index.html">Volver</a></center>
  95.     </div>
  96.    
  97.          
  98.        <?php
  99.    
  100.   if(isset($_POST['sesionxd'])) {
  101.  
  102.   verificar();
  103.  
  104.    
  105. }
  106. ?>
Tu codigo aunque funcione es muy vulnerable
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #8 (permalink)  
Antiguo 26/10/2013, 08:40
 
Fecha de Ingreso: septiembre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Cambio de Contraseña

Buen día SkAr88

muchisimas gracias por tu respuesta, la voy a poner en practica y te comento como me fue.

Quisiera que me sacaras de otra duda, tu dices que aunque mi código funcione es vulnerable, pero es que el código que tengo realmente no me funciona porque me saca los errores que puse antes.
por que mi código no funciona? esa es la duda que quiero que me resuelvas, así puedo aprender para próximas ocasiones.


De nuevo muchisimas gracias por tu ayuda.
__________________
Víctor Soto
  #9 (permalink)  
Antiguo 26/10/2013, 09:19
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años
Puntos: 96
Respuesta: Cambio de Contraseña

Cita:
Iniciado por vhsoto Ver Mensaje
Buen día SkAr88

muchisimas gracias por tu respuesta, la voy a poner en practica y te comento como me fue.

Quisiera que me sacaras de otra duda, tu dices que aunque mi código funcione es vulnerable, pero es que el código que tengo realmente no me funciona porque me saca los errores que puse antes.
por que mi código no funciona? esa es la duda que quiero que me resuelvas, así puedo aprender para próximas ocasiones.


De nuevo muchisimas gracias por tu ayuda.
Amigo a ti no te decia eso, pero para tu problema tienes que verificar primeto si la variable fue enviada o definida con la funcion isset() algo asi

Código PHP:
Ver original
  1. if(isset($_POST['email'])){
  2. $destino= $_POST['email'];
  3. }else{
  4. $destino= '';
  5. }
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #10 (permalink)  
Antiguo 26/10/2013, 11:35
 
Fecha de Ingreso: septiembre-2013
Mensajes: 35
Antigüedad: 10 años, 6 meses
Puntos: 1
Respuesta: Cambio de Contraseña

Me sigue saliendo este error:


Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\wamp\www\rsinvestigaciones\cambiopass.php on line 26


Como corrijo eso? que quiere decir ese error?


Gracias
__________________
Víctor Soto
  #11 (permalink)  
Antiguo 26/10/2013, 12:16
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años
Puntos: 96
Respuesta: Cambio de Contraseña

Cita:
Iniciado por vhsoto Ver Mensaje
Me sigue saliendo este error:


Warning: mail(): Failed to connect to mailserver at &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; setting in php.ini or use ini_set() in C:\wamp\www\rsinvestigaciones\cambiopass.php on line 26


Como corrijo eso? que quiere decir ese error?


Gracias
Ese mensaje te sale porque no tienes un servidor de correos (SMTP) instalado en tu pc
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.

Etiquetas: contraseña, formulario, usuarios
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 03:36.