Skip to content

Persistance des tâches

Objectifs pédagogiques

  • Sauvegarder les tâches dans un fichier local (au lieu de les perdre à chaque rechargement).
  • Charger les tâches depuis un fichier JSON à l’ouverture de la page.
  • Appliquer la lecture/écriture conditionnelle selon la méthode HTTP.

Introduction

Jusqu’ici, les tâches étaient définies en dur dans le code. À présent, on souhaite qu’elles soient sauvegardées entre deux rechargements.

Nous allons utiliser un fichier tasks.json qui servira de base de données.

Exercice pratique

  1. Créer un fichier index.php.
  2. Si le fichier tasks.json existe, charger son contenu (décodage JSON).
  3. Sinon, partir d’un tableau vide.
  4. Lorsqu’un formulaire est soumis via POST, ajouter la tâche au tableau.
  5. Réécrire le fichier tasks.json avec la nouvelle liste.
  6. Afficher la liste des tâches à chaque chargement.

Correction

Visualiser la correction

Chargement des tâches (au début du fichier)

php
<?php
$file = 'tasks.json';

if (file_exists($file)) {
    $tasks = json_decode(file_get_contents($file), true);
} else {
    $tasks = [];
}

Ajout d’une tâche via un formulaire

php
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($_POST['task'])) {
    $task = trim($_POST['task']);
    if ($task !== '') {
        $tasks[] = $task;
        file_put_contents($file, json_encode($tasks));
    }
}

Affichage du formulaire

php
<form method="POST">
  <input type="text" name="task" placeholder="Nouvelle tâche">
  <button type="submit">Ajouter</button>
</form>

Affichage de la liste des tâches

php
<?php if (count($tasks) > 0): ?>
  <ul>
    <?php foreach ($tasks as $task): ?>
      <li><?= htmlspecialchars($task) ?></li>
    <?php endforeach; ?>
  </ul>
<?php else: ?>
  <p>Aucune tâche enregistrée.</p>
<?php endif; ?>

Explications

  • Le fichier tasks.json est utilisé comme stockage persistant.
  • Le file_exists() vérifie si on peut charger des données.
  • json_decode() transforme le fichier JSON en tableau PHP.
  • json_encode() sauvegarde le tableau mis à jour.
  • htmlspecialchars() sécurise l’affichage des entrées utilisateur.