Questions pour vérifier la compréhension
Le navigateur reçoit-il le code PHP ?
Non. Le code est exécuté sur le serveur ; le navigateur ne reçoit que le HTML produit.
Que fait le serveur web d’une requête vers un fichier .php ?
Il le fait exécuter par l’interpréteur PHP et renvoie le résultat, au lieu d’envoyer le fichier tel quel.
Dans prepare(), à quoi sert :cat ?
C’est un emplacement nommé ; la valeur correspondante est fournie à part, dans execute().
Pourquoi une requête préparée protège-t-elle la base ?
Le modèle est analysé avant l’arrivée des valeurs : une valeur ne peut que remplir son emplacement, elle ne modifie jamais la structure de la requête.
À quoi sert htmlspecialchars() ?
À convertir les caractères spéciaux du HTML, pour qu’une donnée affichée ne soit jamais interprétée comme du code par le navigateur.
Transcription de l’animation
1. Statique ou dynamique
Une page statique est un fichier envoyé tel quel : tout le monde reçoit exactement le même contenu. Une page dynamique est fabriquée à chaque demande par un programme côté serveur, ici en PHP, souvent à partir d’une base de données.
2. Le parcours de la requête
Alice ouvre la liste des produits de la catégorie 3. Le navigateur envoie une requête HTTP avec un paramètre dans l’URL : categorie=3. Le serveur web (Apache, Nginx) voit un fichier .php : il ne l’envoie pas tel quel, il le fait exécuter par PHP. Le script interroge la base de données (MySQL, MariaDB) pour récupérer les produits de la catégorie 3. La base renvoie les lignes trouvées. PHP les insère dans du HTML. Le navigateur ne reçoit que ce HTML : il ne voit jamais le code PHP, ni la base de données.
3. Le script PHP
Côté serveur, le script produits.php se connecte d’abord à la base avec PDO. Il prépare la requête : le texte SQL contient un emplacement, :cat, et pas la valeur elle-même. Il l’exécute en fournissant la valeur reçue dans l’URL. Requête et valeur voyagent séparément. Il récupère les résultats dans un tableau, prêt à être affiché.
4. Dans la base de données
La base exécute la requête. Elle examine la table produit… …et retient les lignes dont la catégorie vaut 3. Elle ne renvoie que les colonnes demandées, nom et prix : c’est le jeu de résultats, transmis à PHP.
5. Construire la page
PHP parcourt les résultats et écrit un élément de liste pour chaque produit. htmlspecialchars() neutralise les caractères spéciaux du HTML : une donnée reste une donnée, même une fois affichée. Le HTML produit part vers le navigateur, qui l’affiche. Une autre catégorie donnerait une autre page, avec le même script.
6. Pourquoi une requête préparée
Pourquoi une requête préparée ? Comparons deux façons d’écrire la même requête. En collant la saisie de l’utilisateur au texte de la requête, la base reçoit un seul bloc : elle ne distingue plus ce qui vient du développeur de ce qui vient de l’utilisateur. Avec une requête préparée, le modèle est envoyé et analysé d’abord. La valeur arrive ensuite, séparément. Elle ne peut que remplir l’emplacement prévu : quel que soit son contenu, elle reste une donnée et ne modifie jamais la structure de la requête.
7. Vigilance sécurité
Vigilance : toute donnée qui vient du client, URL, formulaire ou cookie, est à considérer comme non fiable. Pour la base : uniquement des requêtes préparées, jamais de concaténation de saisies. Pour la page : on échappe chaque donnée au moment de l’afficher. L’application se connecte avec un compte limité au strict nécessaire, jamais avec root. Et en production, les erreurs détaillées vont dans les journaux, pas à l’écran.
8. À retenir
En résumé : le navigateur demande, le serveur web délègue à PHP, PHP interroge la base et renvoie du HTML. Deux réflexes à chaque ligne de code : requête préparée pour la base, échappement pour l’affichage.
© 2026 Bruno Jousseaume. Ce cours est publié sous licence CC BY-NC-SA 4.0 : vous pouvez le partager et l’adapter en citant l’auteur et un lien vers cette page, sans usage commercial, et en partageant vos adaptations sous la même licence.