Instructions pour réaliser le TP



Pour préparer ce TP, nous allons voir les points suivants :

  • prérequis ;
  • objectifs ;
  • structure de la table MySQL ;
  • structure des pages PHP ;
  • rappel 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 ;
  • écrire dans une table ;
  • utilisation de PDO et des requêtes préparées.


Objectifs



Qu'est-ce que je vous avais dit qu'il fallait absolument faire avant de commencer à attaquer notre script PHP ? 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. Il faut particulièrement se demander ce que l'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 et en haut, deux zones de texte : 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 en allant du plus récent au plus ancien.

C'est un peu flou ? O.K., regardez sur la figure suivante à quoi doit ressembler votre page PHP une fois terminée.
Une fois 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.

Aperçu du mini-chat une fois réalisé





Structure de la table MySQL



Comme à chaque fois que l'on se servira d'une base de données, on va commencer par étudier sa forme, c'est-à-dire la liste des champs qu'elle contient. Voici un petit tableau que j'ai réalisé en une minute sur une feuille de papier brouillon :

ID

pseudo

message

1

Tom

Il fait beau aujourd'hui, vous ne trouvez pas ?

2

John

Ouais, ça faisait un moment qu'on n'avait pas vu la lumière du soleil !

3

Patrice

Ça 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) : il 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 » (cela 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, 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 deux 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 deux fichiers, comme sur la figure suivante.

Organisation des pages du mini-chat



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 

1

2

3

4

5

<?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 qu'utilisent 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. Êtes-vous sûr de vouloir le faire ? ».




Rappel 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 deux 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, lors de 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.


À 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 !

Créé avec HelpNDoc Personal Edition: Créer des fichiers d'aide Qt Help multi-plateformes