Par Valentin Brosseau / @c4software
Deux choses seulement :
Tout le reste, c'est de l'affichage.
Une liste de tâches et une liste de catégories.
Question : où les ranger pour qu'elles survivent à la fermeture du navigateur ?
include('utils/db.php');
$tasks = $pdo->query("SELECT * FROM taches")->fetchAll(PDO::FETCH_ASSOC);Elle garde l'état du visiteur :
Jamais les données métier.
| id | titre | categorie_id | terminee |
|---|---|---|---|
| 1 | Réviser | 1 | 0 |
| 2 | Ranger | 2 | 1 |
Une ligne, un id donné par la base.
FOREIGN KEY (categorie_id) REFERENCES categories(id)La tâche ne connait pas le mot « Cours », elle connait le numéro de sa catégorie.
SELECT taches.*, categories.nom AS categorie
FROM taches
JOIN categories ON categories.id = taches.categorie_idUne ligne de résultat = une tâche et le nom de sa catégorie.
foreach ($tasks as $task) {
echo $task['titre'];
}fetchAll() rend un tableau de tableaux : le TP Tableaux, en vrai.
<a href="index.php?page=terminer&id=2">Terminer</a>id.UPDATE, INSERT ou DELETE.Sans redirection, un F5 rejoue l'action et insère une deuxième fois.
header('location: index.php?page=home');
die();Les deux lignes, toujours.
L'utilisateur écrit ce qu'il veut dans l'URL.
index.php?page=terminer&id=42Question : que fait votre requête avec ça ?
UPDATE taches SET terminee = 1 WHERE id = 42isset() puis ctype_digit().// Jamais, au grand jamais
$pdo->query("... WHERE id = " . $_GET['id']);Question : que devient la requête ?
$stmt = $pdo->prepare("UPDATE taches SET terminee = 1 WHERE id = ?");
$stmt->execute([$_GET['id']]);Une valeur qui vient de l'utilisateur ne se concatène jamais.
DELETE FROM taches WHERE id = ?
DELETE FROM tachesLa deuxième vide la table. Sans confirmation.
id qui ne change jamais.Place au TP 🚀