Changer l’état d’une tâche
Objectifs pédagogiques
- Mettre à jour dynamiquement une donnée dans un fichier JSON.
- Implémenter une action permettant de marquer une tâche comme faite ou non faite.
- Utiliser une structure de lien ou un formulaire pour déclencher une action.
- Séparer les responsabilités dans le code (affichage / traitement).
Structure des fichiers
/project-root/
│
├── index.php ← Affiche la liste et le formulaire
├── add.php ← Traite l’ajout d’une tâche
├── toggle.php ← Change le statut d’une tâche
└── tasks.json ← Stocke les tâchesExercice pratique
- Ajouter un bouton ou lien pour chaque tâche permettant de changer son statut (
done). - Créer un fichier
toggle.phpqui prendra en paramètre un identifiant (index du tableau). - Mettre à jour la tâche concernée dans le fichier
tasks.json. - Rediriger vers
index.phpaprès la modification.
Correction
Visualiser la correction
Lien dans index.php
php
<ul>
<?php foreach ($tasks as $index => $task): ?>
<li>
<?= $task['done'] ? '✅' : '❌' ?>
<?= htmlspecialchars($task['label']) ?> - <?= htmlspecialchars($task['category']) ?>
<a href="toggle.php?id=<?= $index ?>">Changer le statut</a>
</li>
<?php endforeach; ?>
</ul>Fichier toggle.php
php
<?php
if (!isset($_GET['id'])) {
header('Location: index.php');
exit;
}
$id = (int) $_GET['id'];
$tasks = [];
if (file_exists('tasks.json')) {
$json = file_get_contents('tasks.json');
$tasks = json_decode($json, true) ?? [];
}
if (!isset($tasks[$id])) {
header('Location: index.php');
exit;
}
$tasks[$id]['done'] = !$tasks[$id]['done'];
file_put_contents('tasks.json', json_encode($tasks, JSON_PRETTY_PRINT));
header('Location: index.php');
exit;Explications
- La valeur de
doneest inversée :truedevientfalse, et inversement. - L'identifiant de la tâche est récupéré dans l’URL.
- Le tableau est relu depuis
tasks.json, modifié, puis réécrit. header()redirige toujours à la fin du traitement.