Ajouter une tâche via un formulaire
Objectifs pédagogiques
- Créer un formulaire HTML pour ajouter une tâche.
- Gérer l'envoi d’un formulaire avec la méthode POST.
- Séparer l'affichage (
index.php) et le traitement (add.php). - Rediriger l’utilisateur après soumission avec
header(). - Valider les champs et sécuriser les données reçues.
Structure des fichiers
On adopte une structure claire et maintenable :
/project-root/
│
├── index.php ← Affiche la liste et le formulaire
├── add.php ← Traite les données du formulaire
└── tasks.json ← Fichier contenant les tâchesExercice pratique
- Créer un fichier
index.phpaffichant un formulaire d’ajout de tâche et la liste actuelle. - Créer un fichier
add.phppour traiter les données envoyées. - Valider les champs du formulaire.
- Enregistrer les données dans un fichier
tasks.json. - Rediriger l’utilisateur vers
index.phpaprès traitement. - Afficher les tâches dans un tableau HTML.
Correction
Visualiser la correction
Formulaire (index.php)
php
<form method="POST" action="add.php">
<input type="text" name="label" placeholder="Nouvelle tâche" required>
<input type="text" name="category" placeholder="Catégorie" required>
<button type="submit">Ajouter</button>
</form>Lecture et affichage (index.php)
php
<?php
$tasks = [];
if (file_exists('tasks.json')) {
$json = file_get_contents('tasks.json');
$tasks = json_decode($json, true) ?? [];
}
?>
<ul>
<?php foreach ($tasks as $task): ?>
<li>
<?= htmlspecialchars($task['label']) ?> - <?= htmlspecialchars($task['category']) ?>
(<?= $task['done'] ? '✅' : '❌' ?>)
</li>
<?php endforeach; ?>
</ul>Traitement (add.php)
php
<?php
// Vérification des champs requis
if (!isset($_POST['label'], $_POST['category'])) {
header('Location: index.php');
exit;
}
$label = trim($_POST['label']);
$category = trim($_POST['category']);
// Validation : les champs doivent être non vides
if ($label === '' || $category === '') {
header('Location: index.php?error=1');
exit;
}
// Lecture des tâches existantes
$file = 'tasks.json';
$tasks = [];
if (file_exists($file)) {
$json = file_get_contents($file);
$tasks = json_decode($json, true) ?? [];
}
// Nouvelle tâche
$tasks[] = [
'label' => $label,
'category' => $category,
'done' => false,
'created_at' => date('Y-m-d')
];
// Sauvegarde
file_put_contents($file, json_encode($tasks, JSON_PRETTY_PRINT));
// Redirection finale
header('Location: index.php');
exit;Explications
- Le test
$_SERVER['REQUEST_METHOD']s’assure que les données sont bien envoyées viaPOST. - Les champs sont nettoyés avec
trim()et échappés avechtmlspecialchars(). - Les données sont ajoutées seulement si les deux champs sont valides.
- L'utilisateur est redirigé vers la page principale après traitement.