Hola de nuevo.
El anterior problema va perfectamente, sin embargo ahora tengo otra duda o error que no logro solucionar.
Si lo hago de esta manera a la hora de editar:
Código HTML:
Ver original<form method="post" action="inc/confirmar-editar-usuario.php?id=<?php echo $id_usuario; ?>&usuario=<?php echo $usuario;?>" enctype="multipart/form-data" class="form">
<input name="contrasena" type="password" class="form-control" value="<?php echo $contrasena; ?>" placeholder="Introduce tu contraseña" required >
<br> <input type="submit" value="Editar" name="editar_usuario" class="submit">
Aquí en el formulario muestro la contraseña actual encriptada de la base de datos y cuando el usuario la cambia por otro pues la envía y la vuelve a encriptar y todo bien:
Código PHP:
Ver original$contrasena = $_POST['contrasena'];
//Encripto la contraseña para enviar a la base de datos.
$hashFormat = "$2y$10$";
$salt = "iusesomecrazystrings22";
$hashF_and_salt = $hashFormat . $salt;
$encript_password = crypt($contrasena, $hashF_and_salt); //Fin Encripto la contraseña para enviar a la base de datos.
$query = "UPDATE usuarios SET ";
$query .="contrasena = '{$encript_password}' ";
$query .="WHERE id_usuario = {$id_usuario} ";
//print_r($query);
Hasta aquí todo bien, pero si el usuario no toca la contraseña se envía la contraseña actual que se muestra en el formulario (encriptada) y claro ya pierde el valor anterior enviando una nueva encriptada.
He probado suponiendo que el campo de la contraseña no se toca o vuelve a estar vacío y así enviaría el antiguo valor a la consulta, pero no me ha servido de nada:
Código PHP:
Ver original//Si el campo contraseña está vacío busco la anterior contraseña para enviar
echo "Contraseña vacía";
$query_password_e = "SELECT contrasena from usuarios WHERE id_usuario = {$id_usuario}";
$buscar_contrasena_e = mysqli_query($conexion, $query_password_e); //Si se encuentra la contraseña
{
$encript_password = $fila['contrasena'];
}
}
//Fin Si el campo contraseña está vacío busco la anterior contraseña para enviar
También lo he intentado creando un campo alternativo, por ejemplo
$input_contrasena; (variable sin encriptar que se guarda en la tabla en el campo input_contrasena) y cuando el usuario envíe la contraseña por primera vez al registrarse lo guarde sin encriptar. Luego cuando imprima los datos a la hora de editar lo recoge en el campo contraseña y muestra input_contrasena y así si el usuario no toca dicha contreña vuelve a enviar la contraseña correcta que luego se encriptará, pero claro eso parece que estoy creando de nuevo una contraseña desencriptada y no estoy seguro si es una buena práctica o hay alguna otra solución.
¿Se puede hacer de alguna de estas dos maneras o mejor cambiar a otra alternativa? Espero haberme explicado bien.
Saludos.