Ver Mensaje Individual
  #14 (permalink)  
Antiguo 26/11/2015, 13:42
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Error haciendo login con contraseña encriptada crypt

Hola de nuevo.

Retomo este tema ya que creo que he vuelto a encontrar otra manera de hacer lo que me proponía a última hora.

Por ejemplo probando que si el campo actual de la contraseña es el mismo que la contraseña de la base de datos entonces quiere decir que no se ha tocado nada, por lo tanto no envío en la edición el campo contraseña para no cambiar nada.

Código PHP:
Ver original
  1. if (strcmp($contrasena, $db_contrasena) == 0) {
  2.                 //echo 'Según strcmp las dos cadenas son iguales por lo tanto no se ha cambiado el campo contraseña.';
  3.                 $contrasena_nueva = NULL;
  4.             }

Si al contrario el usuario ha puesto una nueva contraseña entonces si hago la edición con el campo contraseña, quedaría de esta manera.


Código PHP:
Ver original
  1. $contrasena = $_POST['contrasena'];
  2.         $query_password_e = "SELECT contrasena from usuarios WHERE id_usuario = {$id_usuario}";        
  3.         $buscar_contrasena_e = mysqli_query($conexion, $query_password_e);     
  4.         //Si se encuentra la contraseña
  5.         if($fila = mysqli_fetch_array($buscar_contrasena_e))
  6.         {              
  7.             $db_contrasena = $fila['contrasena'];
  8.             //echo "La contraseña de la base de datos es: " . $db_contrasena ;                                     
  9.             if (strcmp($contrasena, $db_contrasena) == 0) {
  10.                 //echo 'Según strcmp las dos cadenas son iguales por lo tanto no se ha cambiado el campo contraseña.';
  11.                 $contrasena_nueva = NULL;
  12.             }
  13.             else {
  14.                 //echo 'Según strcmp las dos cadenas NO son iguales, por lo tanto envío la nueva contraseña';
  15.                 //Encripto la nueva contraseña para enviar a la base de datos.
  16.                 $hashFormat = "$2y$10$";
  17.                 $salt = "iusesomecrazystrings22";
  18.                 $hashF_and_salt = $hashFormat . $salt;
  19.                 $contrasena_nueva = crypt($contrasena, $hashF_and_salt);
  20.                 //Fin Encripto la contraseña para enviar a la base de datos.
  21.                
  22.                 //Hago la edición de la contraseña.
  23.                 $query_editar_contrasena = "UPDATE usuarios SET ";           
  24.                 $query_editar_contrasena .="contrasena = '{$contrasena_nueva}', ";
  25.                 $query_editar_contrasena .="fecha_contrasena = now() ";                  
  26.                 $query_editar_contrasena .="WHERE id_usuario = {$id_usuario} ";            
  27.                 $editar_contrasena_query = mysqli_query($conexion,$query_editar_contrasena);
  28.                 //Fin Hago la edición de la contraseña.            
  29.             }
  30.         }

Así en principio me va bien suponiendo que lo tengo que dejar así como edición o por si alguien me lo pide más adelante. De todas formas la opción más segura y fiable es como bien comenta chronos682 de no mostrar nada en el campo contraseña a la hora de editarla, para eso he decidido hacerlo de otra manera parecida a facebook donde al principio te muestra tres campos vacios donde tienes que completar anterior contraseña, nueva contraseña y repetir nueva contraseña.

Saludos