Au lieu d'avoir deux fichiers (formulaire + traitement), on peut tout mettre dans un seul fichier.
C'est plus simple pour les petits cas d'usage.
<?php
$message = ""; // Message à afficher après soumission
// Cette partie ne s'exécute que si le formulaire a été soumis
if ($_SERVER["REQUEST_METHOD"] === "POST") {
$prenom = htmlspecialchars(trim($_POST["prenom"] ?? ""));
if (!empty($prenom)) {
$message = "Bonjour, $prenom ! Formulaire reçu ✅";
} else {
$message = "Erreur : le prénom est vide ❌";
}
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Formulaire</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<h1>Mon formulaire</h1>
<!-- Affiche le message si le formulaire a été soumis -->
<?php if ($message) : ?>
<div class="alert alert-info"><?= $message ?></div>
<?php endif; ?>
<!-- action="" = poster vers la même page -->
<form method="POST" action="">
<div class="mb-3">
<label class="form-label">Prénom</label>
<input type="text" name="prenom" class="form-control" required>
</div>
<button type="submit" class="btn btn-primary">Envoyer</button>
</form>
</div>
</body>
</html>
action=""ouaction="<?= $_SERVER['PHP_SELF'] ?>"→ le formulaire s'envoie à lui-même.
Si le formulaire a une erreur, il est agréable de garder ce que l'utilisateur a tapé :
<!-- On remet la valeur dans le champ avec value= -->
<input type="text"
name="prenom"
class="form-control"
value="<?= htmlspecialchars($_POST['prenom'] ?? '') ?>">
Pour éviter le "re-soumission du formulaire" quand on actualise la page :
<?php
if ($_SERVER["REQUEST_METHOD"] === "POST") {
// ... traitement ...
// Redirige vers la même page (ou une autre) après le traitement
header("Location: " . $_SERVER['PHP_SELF'] . "?success=1");
exit; // Important ! Arrête l'exécution après la redirection
}
$success = isset($_GET['success']);
?>
Crée un formulaire dans le site modulaire (dans contact.php) qui :