Correction


Hop, hop, hop ! On relève les copies !

Vous allez maintenant voir ce que j'attendais de vous. Si vous avez réussi à faire quelque chose qui marche, bravo !
Et si vous n'y êtes pas arrivés, ne vous en faites pas trop : le principal est que vous ayez fait l'effort de réfléchir. En voyant la correction, vous apprendrez énormément de choses !

Il y avait deux fichiers ; commençons par minichat.php.


minichat.php : formulaire et liste des derniers messages



Cette page contient le formulaire d'ajout de message ainsi que la liste des derniers messages.

Code : PHP

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

    <head>

        <title>Mini-chat</title>

        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />

    </head>

    <style type="text/css">

    form

    {

        text-align:center;

    }

    </style>

    <body>

    

    <form action="minichat_post.php" method="post">

        <p>

        <label for="pseudo">Pseudo</label> : <input type="text" name="pseudo" id="pseudo" /><br />

        <label for="message">Message</label> :  <input type="text" name="message" id="message" /><br />


        <input type="submit" value="Envoyer" />

       </p>

    </form>


<?php

// Connexion à la base de données

try

{

       $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');

}

catch(Exception $e)

{

        die('Erreur : '.$e->getMessage());

}


// Récupération des 10 derniers messages

$reponse = $bdd->query('SELECT pseudo, message FROM minichat ORDER BY ID DESC LIMIT 0, 10');


// Affichage de chaque message (toutes les données sont protégées par htmlspecialchars)

while ($donnees = $reponse->fetch())

{

       echo '<p><strong>' . htmlspecialchars($donnees['pseudo']) . '</strong> : ' . htmlspecialchars($donnees['message']) . '</p>';

}


$reponse->closeCursor();


?>

    </body>

</html>



Le code de cette page est séparé en deux parties :

  • le formulaire (en HTML) ;
  • la liste des messages (affichée en PHP à l'aide d'une requête SQL).

Il n'y avait pas de piège particulier, à l'exception du htmlspecialchars() à ne pas oublier sur le message ET sur le pseudo. Toutes les données issues du formulaire doivent être protégées pour éviter la faille XSS dont nous avons parlé dans un chapitre précédent.


minichat_post.php : enregistrement et redirection



La page minichat_post.php reçoit les données du formulaire, enregistre le message et redirige ensuite le visiteur sur la liste des derniers messages.

Code : PHP 

<?php

// Connexion à la base de données

try

{

       $bdd = new PDO('mysql:host=localhost;dbname=test', 'root', '');

}

catch(Exception $e)

{

        die('Erreur : '.$e->getMessage());

}


// Insertion du message à l'aide d'une requête préparée

$req = $bdd->prepare('INSERT INTO minichat (pseudo, message) VALUES(?, ?)');

$req->execute(array($_POST['pseudo'], $_POST['message']));


// Redirection du visiteur vers la page du minichat

header('Location: minichat.php');

?>



Ce code est relativement court et sans surprise. On se connecte à la base, on insère les données et on redirige le visiteur vers la page minichat.php comme on vient d'apprendre à le faire.

En fait, ce code peut être amélioré (je vais en parler un peu plus loin). En effet, on ne teste pas si le pseudo et le message existent bien, s'ils sont vides ou non, etc. Il est donc en théorie possible d'enregistrer des messages vides, ce qui idéalement ne devrait pas être autorisé.



Créé avec HelpNDoc Personal Edition: Améliorez votre documentation avec l'analyseur de projet avancé de HelpNDoc