- I'm creating an PHP update password page the the new and the confirm new password are working but.
- I wanted to check that the current password is correct before moving on to password update.
- I'm using an encrypt in my database.
- The new pass & confirm pass are both working I just wanted to check if the current session password is correct and give an error if it's wrong I'm not having any errors but whatever I put in the current_password input it will always return me "Wrong password! (Palavra-Passe incorreta!)"
Here is my code:
<?php
// Inicializar a sessão
session_start();
// Verificar se o utilizador está ligado, se não estiver, redireccioná-lo para a página de início de sessão
if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) {
    header("location: login.php");
    exit;
}
if (isset($_SESSION['id']) && isset($_SESSION['password'])) {
    # code...
}
// Incluir ficheiro de configuração
require_once "config.php";
// Definir variáveis e inicializar com valores vazios
$current_password = $new_password = $confirm_password = "";
$current_password_err = $new_password_err = $confirm_password_err = "";
// Processamento de dados do formulário quando o formulário é submetido
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Validar Palavra-Passe
    if (empty(trim($_POST["current_password"]))) {
        $current_password_err = "Este campo é obrigatório!";
    } else {
        $current_password = trim($_POST["current_password"]);
    }
    // Validar Nova Palavra-Passe
    if (empty(trim($_POST["new_password"]))) {
        $new_password_err = "Este campo é obrigatório!";
    } elseif (strlen(trim($_POST["new_password"])) < 6) {
        $new_password_err = "A Palavra-Passe deve ter pelo menos 6 caracteres.";
    } else {
        $new_password = trim($_POST["new_password"]);
    }
    // Validar Confirmação de Palavra-Passe
    if (empty(trim($_POST["confirm_password"]))) {
        $confirm_password_err = "Este campo é obrigatório!";
    } else {
        $confirm_password = trim($_POST["confirm_password"]);
        if (empty($new_password_err) && ($new_password != $confirm_password)) {
            $confirm_password_err = "A Palavra-Passe não correspondeu.";
        }
    }
    // Validar as credenciais
    if (empty($current_password_err) && empty($new_password_err) && empty($confirm_password_err)) {
        $id = $_SESSION['id'];
        $sql = "SELECT password FROM users WHERE id = '$id' AND password = '$current_password'";
        $result = mysqli_query($conn, $sql);
        if (mysqli_num_rows($result) === 1) {
            // Palavra-Passe está correta, atualizar Palavra-Passe
            $sql_2 = "UPDATE users SET password = '$new_password' WHERE id = '$id'";
            mysqli_query($conn, $sql_2);
            session_destroy();
            header("location: login.php");
            // Alertar utilizador com uma mensagem
            $register_message = "A sua palavra-passe foi atualizada com sucesso!";
            $_SESSION['register_message'] = '<div class="alert alert-success">' . $register_message . '</div>';
            exit();
        } else {
            $current_password_err = "Palavra-Passe incorreta!";
        }
    }
    // Ligação fechada
    mysqli_close($conn);
}
?>
