Foros del Web » Programando para Internet » PHP »

formulario para cambiar contraseña, como?

Estas en el tema de formulario para cambiar contraseña, como? en el foro de PHP en Foros del Web. Hola, asi como dice el titulo, como hago un formulario para cambiar la contraseña. Tengo esto, pero obviamente no me esta dando resultado. Formulario.php Código ...
  #1 (permalink)  
Antiguo 25/11/2009, 14:21
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Exclamación formulario para cambiar contraseña, como?

Hola, asi como dice el titulo, como hago un formulario para cambiar la contraseña.

Tengo esto, pero obviamente no me esta dando resultado.

Formulario.php
Código PHP:

$usuario
=$_SESSION['usuario'];
$sql "SELECT * FROM usuarios WHERE usuario='".$_SESSION['usuario']."'";
mysql_query($sql);

echo
"

<form name='enviar' method='post' action='admin_clave_procesar.php'>
     <br><br>
     <input name='id' type='hidden' value='$row[id]'>
      <label>Introduce tu Contraseña actual<br>
      <input name='clave' type='password' size='20'>
    </label>
      <br><br>
      <label>Introduce tu nueva Contraseña<br>
      <input name='clave' type='password' size='20'>
    </label>
      <br><br>
      <label>Confirmar tu nueva Contraseña<br>
      <input name='clave2' type='password' size='20'>
    </label>
      <br>
      <br>     
      <input type='image' src='../img/btn_actualizar.jpg' value='enviar' /><br />
</form> "
;

?> 
procesar.php

Código PHP:

<?php session_start();
$usuario=$_SESSION['usuario'];
include(
'../conexion/conectar.php');

$clave=$_POST[clave];
$clave2==$_POST[clave2];


$sql "UPDATE usuarios SET clave='$clave', clave2='$clave2' WHERE usuario='".$_POST['usuario']."'";
mysql_query($sql);
 
$result mysql_query($sql);
echo 
"<meta http-equiv='refresh' content='0;url=admin.php' />";
?>

Cualquier ayuda con esto seria agradable.

Gracias y saludos.
  #2 (permalink)  
Antiguo 25/11/2009, 14:30
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: formulario para cambiar contraseña, como?

cual es el problema ?... no te actuliza o que ?

PD: emm trata de ver mas el tema de la seguridad en cuanto a los update y todo eso, porque con ese codigo estas muy expuesto a sql injection.
  #3 (permalink)  
Antiguo 25/11/2009, 14:30
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: formulario para cambiar contraseña, como?

1- Tienes que comprobar que la contrasenia que instroduce el usuario en el campo de constrasenia actual actual coincide con la registrada en la base de datos.
Si coinciden entonces procedes hacer el cambio.

2- En ninguna parte del formulario veo que envias el campo oculto "Usuario" solo veo el id y no lo usas en ninguna parte

3- Veo que tienes un error recibiendo la clave2.


Código php:
Ver original
  1. $clave2==$_POST[clave2];
  #4 (permalink)  
Antiguo 25/11/2009, 14:39
Avatar de xalupeao  
Fecha de Ingreso: mayo-2008
Ubicación: Santiago, Chile
Mensajes: 749
Antigüedad: 15 años, 11 meses
Puntos: 12
Respuesta: formulario para cambiar contraseña, como?

El $row[id] esta vacio a todo esto porque nunca haces un

$row=mysql_fetch_array(mysql_query($sql));


$result = mysql_query($sql); con eso estas haciendo la consulta dos veces :S
  #5 (permalink)  
Antiguo 25/11/2009, 16:05
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: formulario para cambiar contraseña, como?

Ok gracias a todos por responder, en cuanto a la seguridad, pues nanai nanai, estoy expuesto a todo en ese codigo, no se que tutorial es bueno que me indique como mejorar la seguridad en las sesiones y mira que he buscado.

Como dije al ppio del post, ni idea como hacer esto del cambio de contraseña, por eso postee, para ver si alguien me daba luces de como hacerlo.

En cuanto al error, oops, pelon de tipeaje :$

El gran problema es que no actualiza, no se si en el archivo procesar hay que agregarle alguna otra condicion, porque me parece ilogico que existan dos claves(la nueva y la vieja) en el formulario, tiene que haber algo que las diferencie.

En cuanto al formulario como tal, ahora que me doy cuenta, no hace falta hacer la consulta que hago ahi, porque no muestro nada. Gracias por la acotacion Xalupeao.

Gracias y saludos
  #6 (permalink)  
Antiguo 25/11/2009, 18:48
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
Desacuerdo Respuesta: formulario para cambiar contraseña, como?

Buenas!!

pues de entrada tienes un "detallote"

estas haciendo una condicion basado en una variable que NO existe

obvio que nunca la va a encontrar y por logica no va a actualizar lo que pusiste

Código PHP:
<?php session_start(); 
$usuario=$_SESSION['usuario']; 
include(
'../conexion/conectar.php'); 

$clave=$_POST[clave]; 
$clave2==$_POST[clave2]; 


$sql "UPDATE usuarios SET clave='$clave', clave2='$clave2' WHERE usuario='".$_POST['usuario']."'"
mysql_query($sql); 
  
$result mysql_query($sql); 
echo 
"<meta http-equiv='refresh' content='0;url=admin.php' />"
?>
concretamente por lo que entiendo en tu session esta el usuario no lo envias y ahi lo comparas como si lo hubiera enviado el formulario

esto deveria ser asi:
Código PHP:
$sql "UPDATE usuarios SET clave='$clave', clave2='$clave2' WHERE usuario='".$_SESSION['usuario']."'"
por otro lado en ningun lugar comparas que la contraseña anterior sea "valida" y asignas a la misma variable el nuevo pass

te recomendaria que hicieras mayor comparaciones para mejor seguridad
primero comparar que la contraseña escrita sea valida
segundo crear $clave2 y $clave3 y compararlas entre si para verificar que se escribio la misma
y pues eso de logistica porque lo otro ya te lo comentaron los compañeros....

espero haberte ayudado...

un saludo!!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #7 (permalink)  
Antiguo 25/11/2009, 19:12
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: formulario para cambiar contraseña, como?

Excelente, gracias por responder HalconVigia, dejame hacer la respectivas modificaciones que me recomiendas.

Ahora me surge algo fuera de todo conexto que estoy hablando aca, tengo este codigo, para el registro de usuarios, pero que pasa, al hacer todas las comprobaciones y que todo esta O.K. deberia devolverme a la pagina del admin del usuario, pues no lo hace, se queda en blanco la pagina, y ya no se que hacer, he intentado con los 3 metodos, el php, el html y el javascript.

Este es el codigo:
Código PHP:

<?php session_start();

include(
'../conexion/conectar.php');

if(
$_POST["nombre"]==NULL|$_POST["apellidos"]==NULL|$_POST["email"]==NULL|$_POST["direccion"]==NULL|$_POST["telefono_celular"]==NULL|$_POST["ciudad"]==NULL|$_POST["usuario"]==NULL|$_POST["clave"]==NULL|$_POST["clave2"]==NULL|$_POST["pregunta"]==NULL|$_POST["respuesta"]==NULL){

echo 
"<script>alert('Debe llenar los campos obligatorios, por favor intentelo de nuevo. Gracias');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";

} else {
    
$nombre $_POST["nombre"];
    
$apellidos $_POST["apellidos"];
    
$email =$_POST["email"];
    
$direccion $_POST["direccion"];
    
$telefono_celular $_POST["telefono_celular"];
    
$telefono_local $_POST["telefono_local"];
    
$ciudad $_POST["ciudad"];
    
$estado $_POST["estado"];
    
$codigo_postal $_POST["codigo_postal"];
    
$usuario $_POST["usuario"]; 
    
$clave $_POST["clave"]; 
    
$clave2 $_POST["clave2"]; 
    
$pregunta $_POST["pregunta"];
    
$respuesta $_POST["respuesta"];
    
$recibir $_POST["recibir"];
  
$query sprintf("SELECT usuario FROM usuarios WHERE usuarios.usuario='%s'",  // Ahora
       
mysql_real_escape_string($usuario)); 
$result=mysql_query($query);
if(
mysql_num_rows($result)){

echo 
"<script>alert('El nombre de usuaio ya existe, por favor intentelo de nuevo. Gracias');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";

} else {

mysql_free_result($result);
  
 if(
$_POST['clave']!=$_POST['clave2']) {

 echo 
"<script>alert('Las contraseñas deben coincidir, por favor intentelo de nuevo. Gracias');</script>";
 echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";

} elseif (
$_POST['action'] == "checkdata") {
    if (
$_SESSION['tmptxt'] == $_POST['tmptxt']) {

                
$sql="INSERT INTO `aeromusica_db`.`usuarios` (`nombre`, `apellidos`, `email`, `direccion`, `telefono_celular`, `telefono_local`, `ciudad`, `estado`, `codigo_postal`, `usuario`, `clave`, `clave2`, `pregunta`, `respuesta`, `recibir`)";
$sql .="VALUES ('$nombre','$apellidos','$email','$direccion','$telefono_celular','$telefono_local', '$ciudad', '$estado', '$codigo_postal', '$usuario','$clave','$clave2', '$pregunta', '$respuesta', '$recibir')";
mysql_query($sql);
       
    } else {
       echo 
"<script>alert('El codigo es incorrecto, por favor intentelo de nuevo. Gracias');</script>";
       echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";

    }
    exit;
}

}

}
echo 
"<script>alert('Bienvenido a Aeromusica. Gracias por registrarse.');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=admin.php' />";

?>

lo he intentado en php:

Código PHP:

header
("Location: admin.php"); 

en html:

Código HTML:
<meta http-equiv='refresh' content='0;url=admin.php' /> 
y en javascript

Código:
<script type="text/javascript"> window.location="admin.php"; </script>
  #8 (permalink)  
Antiguo 25/11/2009, 19:29
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
De acuerdo Respuesta: formulario para cambiar contraseña, como?

Buenas!!

Me temo que tienes que trabajar mucho mas en tu logistica.....

segun vengo entendiendo estas copiando y pegando codigo... trata de entenderlo y usar la logica para la adaptacion de los codigos que puedas conseguir

Aqui lo tienes... funcionando....
Código PHP:
<?php session_start();

include(
'../conexion/conectar.php');

if(
$_POST["nombre"]==NULL|$_POST["apellidos"]==NULL|$_POST["email"]==NULL|$_POST["direccion"]==NULL|$_POST["telefono_celular"]==NULL|$_POST["ciudad"]==NULL|$_POST["usuario"]==NULL|$_POST["clave"]==NULL|$_POST["clave2"]==NULL|$_POST["pregunta"]==NULL|$_POST["respuesta"]==NULL){

echo 
"<script>alert('Debe llenar los campos obligatorios, por favor intentelo de nuevo. Gracias');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";

} else {
    
$nombre $_POST["nombre"];
    
$apellidos $_POST["apellidos"];
    
$email =$_POST["email"];
    
$direccion $_POST["direccion"];
    
$telefono_celular $_POST["telefono_celular"];
    
$telefono_local $_POST["telefono_local"];
    
$ciudad $_POST["ciudad"];
    
$estado $_POST["estado"];
    
$codigo_postal $_POST["codigo_postal"];
    
$usuario $_POST["usuario"];
    
$clave $_POST["clave"];
    
$clave2 $_POST["clave2"];
    
$pregunta $_POST["pregunta"];
    
$respuesta $_POST["respuesta"];
    
$recibir $_POST["recibir"];

$query sprintf("SELECT usuario FROM usuarios WHERE usuarios.usuario='%s'",  // Ahora
       
mysql_real_escape_string($usuario));
$result=mysql_query($query);
if(
mysql_num_rows($result)){

echo 
"<script>alert('El nombre de usuaio ya existe, por favor intentelo de nuevo. Gracias');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";

} else {

mysql_free_result($result);

 if(
$_POST['clave']!=$_POST['clave2']) {

 echo 
"<script>alert('Las contraseñas deben coincidir, por favor intentelo de nuevo. Gracias');</script>";
 echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";

} elseif (
$_POST['action'] == "checkdata") {
    if (
$_SESSION['tmptxt'] == $_POST['tmptxt']) {

                
$sql="INSERT INTO `aeromusica_db`.`usuarios` (`nombre`, `apellidos`, `email`, `direccion`, `telefono_celular`, `telefono_local`, `ciudad`, `estado`, `codigo_postal`, `usuario`, `clave`, `clave2`, `pregunta`, `respuesta`, `recibir`)";
$sql .="VALUES ('$nombre','$apellidos','$email','$direccion','$telefono_celular','$telefono_local', '$ciudad', '$estado', '$codigo_postal', '$usuario','$clave','$clave2', '$pregunta', '$respuesta', '$recibir')";
mysql_query($sql);
    echo 
"<script>alert('Bienvenido a Aeromusica. Gracias por registrarse.');</script>";
    echo 
"<meta http-equiv='refresh' content='0;url=admin.php' />";
    } else {
       echo 
"<script>alert('El codigo es incorrecto, por favor intentelo de nuevo. Gracias');</script>";
       echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />";
    } } } }
?>
ahora.... Busca la diferencia y fijate de cual es la logica del error

un saludo!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #9 (permalink)  
Antiguo 25/11/2009, 19:52
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: formulario para cambiar contraseña, como?

Gracias!!!

Ya vi el error, gracias nuevamente, bueno te comento que eso de copiar y pegar, no tanto, jejeje, un poco nada mas, estoy aprendiendo todavia y bueno tu sabes preguntando y leyendo uno va aprendiendo poco a poco, pero de todas maneras gracias por las correcciones!!! ;)

Retomando el tema del cambio de contraseña, me surge una duda, leyendo el codigo:

Código PHP:

if($clave2 != $clave3){

echo 
"<script>alert('Las contraseñas deben coincidir, por favor intentelo de nuevo. Gracias');</script>"
 echo 
"<meta http-equiv='refresh' content='0;url=registro.php' />"

}else{

$sql "UPDATE usuarios SET clave='$clave', clave2='$clave2' WHERE usuario='".$_SESSION['usuario']."'";
mysql_query($sql);

echo 
"<script>alert('La contraseña fue actualizada. Gracias');</script>"
 echo 
"<meta http-equiv='refresh' content='0;url=admin.php' />"


Aqui es donde no lo entiendo, porque en el formulario tengo 3 casillas, contraseña actual(clave), la nueva(clave2) y repetir la nueva (clave3).

Por eso mi preguntar, deberia tener un campo en la BD con la clave3?

Si yo vuelvo a actualizar por 3ra vez esa contraseña, donde la deposito?

Como paso de la nueva a la actual?, es decir, sustituyendola.

Estoy un poco perdido por aca.

Gracias y saludos!!!!
  #10 (permalink)  
Antiguo 25/11/2009, 20:24
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: formulario para cambiar contraseña, como?

Hola HalconVigia, no se si esto es correcto o si se podria hacer de alguna otra manera, pero esta funcionando.

Código PHP:

$sql 
"UPDATE usuarios SET clave='$clave3', clave2='$clave2' WHERE usuario='".$_SESSION['usuario']."'";
mysql_query($sql); 
Pienso que es lo mas rudimentario, pero funciona

:D Gracias nuevamente

Un saludo!!!
  #11 (permalink)  
Antiguo 25/11/2009, 21:25
 
Fecha de Ingreso: abril-2003
Ubicación: Mexico
Mensajes: 604
Antigüedad: 21 años
Puntos: 23
De acuerdo Respuesta: formulario para cambiar contraseña, como?

Buenas!!

no, el tema no va para que las guardes, si no para que tu puedas verificar que los datos estan correctos

si tu no verificas que todo fue correctamente escrito en el primer campo puedo poner por ejemplo

$clave = 413423
$clave2 = 234522

si tu no verificas que las dos sean iguales, ¿que sentido tiene que la escriban de nuevo?

obviamente tu solo vas a almacenar la $clave pero en donde dejas la primera? osea la almacenada

entonces....

tomas la clave almacenada y la comparas con la que teclea el usuario

Código PHP:
if ($clavealmacenada == $clave) {
   if (
$clave2 == $clave3) {
      
$clave=$clave2;
      
// Aqui Guardas y todo lo que siga........
   
} else {
     echo 
"las contraseñas no son iguales, verificalas";
     
// aqui haces que regrese o lo que quieras.....
   
}
} else {
  echo 
"tu contraseña no es valida, no puedes realizar el cambio, verificala, etc.";
   
//aqui proteges que no cualquiera pueda cambiar la clave y haces que regrese etc.

ese seria la idea, obviamente ya recibiste, abriste la base para comparar, etc...

haber si me explique bien

un saludo!!!
__________________
¡El Respeto al Derecho Ajeno Es la Paz!
  #12 (permalink)  
Antiguo 25/11/2009, 22:27
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: formulario para cambiar contraseña, como?

Gracias por responder!!!

A ver ando un poco confundido con esto.

Tengo este codigo:

Código PHP:

<?php session_start();?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php

include('../conexion/conectar.php');


$clave=$_POST[clave];
$clave2=$_POST[clave2];
$clave3=$_POST[clave3];

if(
$clave==NULL|$clave2==NULL|$clave3==NULL){

echo 
"<script>alert('Todos los campos son obligatorios, por favor intente de nuevo. Gracias');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=admin_clave.php' />";

}elseif(
$clave2 != $clave3){

echo 
"<script>alert('Las contraseñas no coinciden, por favor intente de nuevo. Gracias');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=admin_clave.php' />";

}

$registro="SELECT usuario, clave FROM usuarios WHERE usuario='".$_SESSION['usuario']."' AND clave='".$_SESSION['clave']."'";
mysql_query($registro);
if(
$_POST['clave']==$_SESSION['clave']){

$clave=sha1(md5($clave));

$sql "UPDATE usuarios SET clave='$clave3' WHERE usuario='".$_SESSION['usuario']."' AND clave='".$_SESSION['clave']."'";
mysql_query($sql);
 
$result mysql_query($sql);
echo 
"<meta http-equiv='refresh' content='0;url=admin.php' />";

}else{

echo 
"<script>alert('La contraseña actual no coincide, por favor intente de nuevo. Gracias');</script>";
echo 
"<meta http-equiv='refresh' content='0;url=admin_clave.php' />";
}
?>
Lo que no entiendo es como puedo comparar la clave almacenada con la clave actual del usuario.

en la BD el campo de la contraseña es clave, cuando tu me hablas de $clavealmacenada==$clave, ahi es donde me pierdo. Porque clave es el campo de la BD, entonces deberia o por lo menos asi lo veo, que la clave posteada debe ser igual a la clave de sesio, no?

if($_POST['clave']==$_SESSION['clave'])

O

if($_POST['clave']==$row['clave']){

no se ahi es donde me pierdo.

Gracias nuevamente

Saludos
  #13 (permalink)  
Antiguo 25/11/2009, 22:29
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
Respuesta: formulario para cambiar contraseña, como?

A todas estas, me sigue arrojando el mensaje que la clave no coincide con la almacenada
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 19:16.