prepare($sql); $stmt->execute([':email' => $email, ':token' => $token]); $row = $stmt->fetch(PDO::FETCH_ASSOC); if (!$row) { $erreur = $translations['err_lien_invalide'] ?? 'Lien invalide.'; } else { // Fenêtre de validité 24h $t0 = max(dt_to_ts($row['modifie_le'] ?? null), dt_to_ts($row['cree_le'] ?? null)); $ageH = (time() - $t0) / 3600; if ($ageH > 24) { $erreur = $translations['err_lien_expire'] ?? 'Le lien a expiré. Demandez un nouvel envoi.'; } else { // On autorise la page de changement de mot de passe via session $_SESSION['reset_email'] = $email; $_SESSION['code_valide'] = true; // Redirection propre (on retire token/email de l'URL) $lang = $_SESSION['lang'] ?? 'ru'; header('Location: valider_email_cabinet.php'); exit; } } } } // ------------------------------------------------------------ // 2) Sécurité d’accès à la page sans token // ------------------------------------------------------------ if (!isset($_SESSION['reset_email'], $_SESSION['code_valide']) || !$_SESSION['code_valide']) { // Si pas de session valide ET pas d’erreur déjà définie → rediriger if ($erreur === '') { header("Location: mdp_oublie.php"); exit; } } // ------------------------------------------------------------ // 3) Soumission du nouveau mot de passe // ------------------------------------------------------------ if ($_SERVER['REQUEST_METHOD'] === 'POST' && empty($success) && empty($erreur)) { $mdp1 = $_POST['mot_de_passe'] ?? ''; $mdp2 = $_POST['confirm_mot_de_passe'] ?? ''; if (strlen($mdp1) < 8 || $mdp1 !== $mdp2) { $erreur = $translations['erreur_mdp_invalides'] ?? 'Mot de passe invalide.'; } else { try { $hash = password_hash($mdp1, PASSWORD_DEFAULT); $stmt = $pdo->prepare(" UPDATE compte SET mot_de_passe = :hash, email_valide = 1, token_validation = NULL, modifie_le = NOW() WHERE email = :email LIMIT 1 "); $stmt->execute([ ':hash' => $hash, ':email' => $_SESSION['reset_email'], ]); // Nettoyage session (garder la langue) $lang = $_SESSION['lang'] ?? 'ru'; session_unset(); session_destroy(); session_start(); $_SESSION['lang'] = $lang; $success = $translations['success_mdp_mis_a_jour'] ?? 'Mot de passe mis à jour. Votre email est confirmé.'; } catch (Throwable $e) { error_log('valider_mail.php update pwd: '.$e->getMessage()); $erreur = $translations['erreur_generique'] ?? 'Erreur, veuillez réessayer.'; } } } ?>