Pour préparer ce TP, nous allons voir les points suivants :
- Prérequis
- Objectifs
- Structure de la table MySQL
- Structure des pages PHP
- Rappels sur les consignes de sécurité
Prérequis
Vous pourrez suivre ce TP sans problème si vous avez lu tous les chapitres précédents. Plus précisément, nous allons utiliser les notions suivantes :
- Transmission de variables via un formulaire
- Lire dans une table
- Ecrire dans une table
- Utilisation de PDO et des requêtes préparées
Objectifs
Avant de commencer à attaquer notre script PHP, qu'est-ce que je vous avais dit qu'il fallait absolument faire en premier ? Un brouillon !
Eh oui, votre script ne va pas s'écrire tout seul comme par magie

, alors il va falloir réfléchir un petit peu avant de commencer. En particulier, il faut se demander ce qu'on veut
exactement faire.
Quelles seront les fonctionnalités de mon Mini-Chat ?
Ce sera quelque chose de basique pour commencer, mais rien ne vous empêchera de l'améliorer à votre sauce.
On souhaite avoir, sur la même page, deux zones de texte en haut : une pour écrire votre pseudo, une autre pour écrire votre petit message. Ensuite, un bouton "Envoyer" permettra d'envoyer les données à MySQL, pour qu'il les enregistre dans une table.
En-dessous, le script devra afficher les 10 derniers messages qui ont été enregistrés (parce que si vous les affichez tous et que vous avez 1000 messages ça risque d'être un peu long !) en allant du plus récent au plus ancien.
C'est un peu flou ? OK, voilà à quoi doit ressembler votre page PHP une fois terminée :
Maintenant que l'on sait ce que l'on veut obtenir, il nous sera beaucoup plus facile de le réaliser ! Et ne rigolez pas, trop de gens se lancent dans un script sans vraiment savoir ce qu'ils veulent faire, ce qui les conduit bien souvent dans un mur.
Structure de la table MySQL
Comme à chaque fois que l'on se servira d'une base de données, on va commencer par étudier la forme de la table, c'est-à-dire la liste des champs. Voici un petit tableau que j'ai réalisé en 1 minute sur une feuille de papier brouillon :
| ID | pseudo | message |
|---|
| 1 |
Tom |
Il fait beau aujourd'hui vous trouvez pas ? |
| 2 |
John |
Ouais, ça faisait un moment qu'on n'avait pas vu la lumière du soleil ! |
| 3 |
Patrice |
Ca vous tente d'aller à la plage aujourd'hui ? Y'a de super vagues ! |
| 4 |
Tom |
Cool bonne idée ! J'amène ma planche ! |
| 5 |
John |
Comptez sur moi ! |
On distingue les champs suivants :
- ID (type INT) : qui nous permettra de savoir dans quel ordre ont été postés les messages. Il faudra le mettre en auto_increment pour que les numéros s'écrivent tout seuls, et ne pas oublier de sélectionner "Primaire" (ça dit à MySQL que c'est le champ qui numérote les entrées).
- pseudo (type VARCHAR) : pensez à indiquer la taille maximale du champ (je vous conseille de mettre le maximum, 255).
- message (type VARCHAR) : de même, on indiquera une taille maximale de 255 caractères. Si vous pensez que vos messages seront plus longs, utilisez plutôt le type TEXT qui est beaucoup moins limité.
Commencez donc par créer cette table dans votre base de données avec phpMyAdmin. Appelez-la comme vous voulez, moi j'ai choisi
minichat.
Structure des pages PHP
Comme pour le TP "Page protégée par mot de passe", nous allons utiliser 2 fichiers PHP :
- minichat.php : contient le formulaire permettant d'ajouter un message et liste les 10 derniers messages.
- minichat_post.php : insère le message reçu avec $_POST dans la base de données puis redirige vers minichat.php.
Il aurait été possible de tout faire sur une seule page PHP, mais pour bien séparer le code il est préférable d'utiliser 2 fichiers comme ici.
Vous avez toutes les connaissances nécessaires pour réaliser un Mini-Chat basé sur la structure du schéma précédent... à l'exception de la redirection. En effet, il existe plusieurs moyens de rediriger le visiteur vers une autre page (via une balise
<meta> par exemple) mais le plus propre et le plus rapide consiste à faire une
redirection HTTP. Voici comment il faut procéder pour faire cela sur la page
minichat_post.php :
Code : PHP | <?php
// Effectuer ici la requête qui insère le message
// Puis rediriger vers minichat.php comme ceci :
header('Location: minichat.php');
?>
|
Le visiteur ne verra jamais la page
minichat_post.php. Celle-ci n'affiche rien mais commande en revanche au navigateur du visiteur de retourner sur
minichat.php.
La fonction header() permet d'envoyer ce qu'on appelle des en-têtes HTTP. C'est le protocole utilisé sur le web entre le serveur et le client pour échanger des pages web. Ici, on utilise une des possibilités de HTTP qui commande une redirection via la commande Location.
Par rapport à d'autres types de redirection (comme la balise <meta>), cette technique a l'avantage d'être instantanée et transparente pour l'utilisateur. De plus, s'il rafraîchit ensuite la page minichat.php, il ne risque pas d'avoir le message souvent gênant et déroutant : "Pour afficher cette page, les informations précédemment transmises doivent être renvoyées. Etes-vous sûr de vouloir le faire ?".
Rappels sur les consignes de sécurité
Un petit rappel ne peut pas faire de mal :
ne faites jamais confiance aux données de l'utilisateur ! Tout ce qui vient de l'utilisateur doit être traité avec la plus grande méfiance.
Ici, on a une page
minichat_post.php assez simple qui reçoit 2 champs : le pseudo et le message. A priori, il n'y a pas de vérification supplémentaire à faire, si ce n'est qu'il faudra veiller à l'affichage à protéger les chaînes de caractères contre la faille XSS (celle qui permet d'insérer du HTML et du Javascript dans la page). Il faudra donc bien veiller à appeler
htmlspecialchars() pour protéger les chaînes.
A vous de jouer !
Allez, j'en ai assez dit. C'est maintenant à votre tour de réfléchir. Avec les éléments que je vous ai donnés, et avec ce que vous avez appris dans les chapitres précédents, vous devez être capables de réaliser le Mini-Chat !
Si vous avez un peu de mal, et si votre script ne marche pas, ne le supprimez pas dans un moment de rage (il ne faut jamais s'énerver

). Faites une pause et revenez-y plus tard.
Si vous coincez vraiment, vous pouvez demander de l'aide sur les forums ou regarder la correction pour vous aider. Faites l'effort dans tous les cas de travailler ce script, ce sera très formateur vous verrez !