Aller au contenu

Exercices — Préserver les données

Créez une page (par exemple accueil.php) qui compte combien de fois le visiteur l’a chargée pendant sa session, et affiche un message d’accueil personnalisé selon des paliers de visite.

VisitesMessage
1Bienvenue !
2 à 4Bon retour !
5 à 9Te revoilà !
10 et plusCoucou, habitué !
VérificationIndice

Appelez session_start() avant toute sortie. Au premier passage, la clé n’existe pas encore : $_SESSION['visites'] ?? 0 donne la valeur de départ (0), à laquelle on ajoute 1. Après cet ajout, la première visite vaut donc 1, ce qui déclenche le premier palier.

Créez une page boutique.php, qui présente cette liste de produits :

idnomprix
1Sirop d’érable 540 ml14,50 $
2Beurre d’érable 250 g9,95 $
3Tire sur la neige6,00 $

Chaque produit s’affiche dans une carte présentant son image, son nom, son prix et un bouton « Ajouter au panier » (?ajouter=<id>) qui l’ajoute au panier conservé en session.

Les cartes pourraient ressembler à ceci :

Aperçu : carte de produit
Chaque carte présente une image, le nom, le prix et un bouton d'ajout.
Sirop d'érable 540 ml
14,50 $
Beurre d'érable 250 g
9,95 $
Tire sur la neige
6,00 $

Une page panier.php affiche les produits du panier et le total:

  • chaque ligne a un lien « Supprimer » permettant de supprimer le produit du panier,
  • Un lien « Vider » (?vider=1) retire tout du panier.
VérificationIndice

Rangez les produits dans un fichier de données commun aux deux pages, indexé par id. Le panier ne conserve que des id dans $_SESSION['panier'] ; le total se calcule en retrouvant chaque prix. Pour supprimer un article, array_splice retire l’élément à une position donnée. Échappez tout affichage avec htmlspecialchars.

Placez la liste des produits dans une base de données et servez-la dans la boutique de l’exercice précédent, à la place du fichier de données.

VérificationIndice 1

Créez une table produits (id en AUTO_INCREMENT, nom, prix) et remplissez-la. Puis réécrivez data/produits.php : au lieu de return [...], il ouvre une connexion PDO, fait un SELECT, et reconstruit le même tableau id => produit avant de le retourner. La boutique et le panier n’ont alors rien à changer.

VérificationIndice 2

Script de création de table et pour l’insertion de données

CREATE TABLE produits (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
prix DECIMAL(6, 2) NOT NULL
);
INSERT INTO produits (nom, prix) VALUES
('Sirop d''érable 540 ml', 14.50),
('Beurre d''érable 250 g', 9.95),
('Tire sur la neige', 6.00);

Les produits sont maintenant en base de données. Une page d’administration permet de les gérer directement, sans passer par phpMyAdmin. Elle réunit les quatre opérations de base, résumées par l’acronyme CRUD : créer (Create), lire (Read), modifier (Update) et supprimer (Delete).

Voici à quoi la liste d’administration pourrait ressembler :

Aperçu : administration des produits
Lister, ajouter, modifier et supprimer (CRUD).
idNomPrixActions
1Sirop d'érable 540 ml14,50 $
2Beurre d'érable 250 g9,95 $
3Tire sur la neige6,00 $
Démonstration : « Ajouter » et « Supprimer » ne modifient que cet aperçu. Dans le projet, ces actions passent par la base de données.

Créez admin/produits.php : la page liste tous les produits dans un tableau, avec un lien « Modifier » et « Supprimer » par ligne, et un lien pour ajouter un produit.

VérificationIndice

Placez la connexion PDO dans un db.php que toutes les pages d’administration incluront. La lecture est un simple SELECT ... FROM produits. Chaque lien d’action transporte l’id de la ligne : modifier.php?id=... et supprimer.php?id=....

Créez admin/ajouter.php : un formulaire (nom et prix) qui, à l’envoi, valide les données et insère le produit, puis redirige vers la liste.

VérificationIndice

Sur POST, validez le nom (non vide) et le prix (nombre positif), puis exécutez un INSERT préparé. Après l’insertion, header('Location: produits.php') renvoie vers la liste, suivi de exit.

Créez admin/modifier.php?id=... : la page charge le produit visé, affiche un formulaire prérempli, puis enregistre les changements à l’envoi.

VérificationIndice

En GET, lisez le produit par son id (requête préparée) et préremplissez les champs avec l’attribut value, échappé. En POST, exécutez un UPDATE ... WHERE id = :id, puis redirigez vers la liste.

Créez admin/supprimer.php?id=... : la page demande d’abord une confirmation, et supprime le produit seulement à l’envoi du formulaire.

VérificationIndice

Une suppression modifie l’état du système : elle ne doit pas se faire par une simple requête GET (une lecture doit rester sans effet). Affichez donc une confirmation, et exécutez le DELETE ... WHERE id = :id uniquement sur l’envoi POST, avant de rediriger.