Réalisation d’un livre d’or

D’après ce que nous avons fait jusqu’ici, j’ai jugé nécessaire de faire ce TP avec vous: Création d’un livre d’or.
Pour ceux qui ne comprennent pas ce que c’est un livre d’or, qu’ils notent qu’un livre d’or s’agit d’un espace permettant aux visiteurs d’un site web de laisser leurs impressions –sur la manière dont ils trouvent le site– au propriétaire. Comme ça le propriétaire saura si son travail plait au gens ou pas. Il saura comment faire pour satisfaire plus ses visiteurs. Un livre d’or est important, même des grands sites en possèdent.

Pour réaliser notre TP, nous avons besoin de créer :

  • Une table qui stockera les données
  • un formulaire pour saisir les données et les envoyer à la base
  • Une page pour afficher les données stockées sur la table

Il faut noter que nous pouvons créer trois pages qui sont la page qui contiendra le formulaire, la page qui traitera les données et la page qui affichera les données. Mais je préfère qu’on travaille sur une page que je nomme guestbook.php

Pour vous faire une idée de ce que nous allons faire, regardez cette capture :

1. La création de la table

Faites-moi le plaisir de créer cette table dans votre base de données MySQL:
Nom de la table : guestbook
Le champ id: int(11), not null, auto_increment , primary key,
le champ pseudo: varchar (225), not null
le champ message: texte, not null
le champ date : date

Si vous ne savez comment créer une table, lisez notre cours sur la création d’une table

2. Le fichier guestbook.php

a. Le formulaire :

Voici le code html de notre formulaire, si vous ne comprenez pas lisez notre cours sur les formulaires:

  1. <form method="post" action="guestbook.php">  
  2.         Pseudo : <input name="pseudo" maxlength="8" /><br />  
  3.         Message :<br />  
  4.         <textarea name="message" rows="8" cols="35"> </textarea> <br />  
  5.         <input type="submit" value="Envoyer" />  
  6. </form>  

Le maxlength="8" veut dire que le pseudo ne doit pas dépasser 8 caractères.

b. Connexion au niveau de la base de données

Pour se connecter à notre base de données (samo), voici le code php, on l’a déjà vu, donc rien à expliquer.

  1. <?php        
  2. mysql_connect("localhost","root","mdp");  
  3. mysql_select_db("samo");     

c. Envoie et stockage de données dans la table

Voici le code php qui nous permet d’envoyer les données et de les stocker sur la table guestbook:

  1. if (isset($_POST['pseudo']) AND isset($_POST['message']))  
  2.   
  3.   if ($_POST['message'] != NULL) // si le message n'est pas vide  
  4.     
  5.       if ($_POST['pseudo'] != NULL) // si le message n'est pas vide  
  6.       
  7. {  
  8.         /* On utilise htmlentities pour empecher les gens d'inserer du html,  
  9. tout code html sera affiché en tant que code html, il ne sera pas interpreté. 
  10. et ent_quotes pour convertir les guillemets doubles et les guillemets simples: 
  11. il faut noter que c'est pour des raisons de securité qu'on a fait ainsi */  
  12. $pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES);   
  13.   
  14.           
  15. $message = htmlentities($_POST['message'], ENT_QUOTES);   
  16. $message = nl2br($message); // nl2br insère un retour à la ligne HTML à chaque nouvelle ligne  
  17.     $date=date("d/m/Y");//cette fonction permet de savoir la date de l'envoi de message  
  18.   
  19. mysql_query("INSERT INTO guestbook VALUES('','$pseudo','$message','$date')");  
  20. }  

d. Affichage des données stockées sur la table

Nous allons afficher les premiers 30 messages sur la première page, les suivants sur la deuxième page et ainsi de suite. Alors nous allons faire un petit calcul mathématique qui consistera à dire qu’à chaque 30 messages stockés, on crée une nouvelle page. Bon cela n’est pas compliqué, il suffit de savoir faire la division.

Au final, voici le code qui affiche les nombres des pages, les messages (…) du livre d’or :

  1. // On commence par compter le nombre totale des messages  
  2. $query = mysql_query('SELECT COUNT(*) FROM guestbook');  
  3. $d = mysql_fetch_array($query);  
  4. $totalDesMessages = $d['COUNT(*)'];  
  5.   
  6. /*  On calcule le nombre de pages à créer , ce qu'on veut,  
  7. c'est afficher 30 messages dans chaque page */  
  8. $nombreDePages  = ceil($totalDesMessages / 30);  
  9.   
  10. //  on fait une boucle pour écrire les liens  des pages  
  11. echo"page : ";  
  12. for ($i = 1 ; $i <= $nombreDePages ; $i++)  
  13. {    echo '<a href="guestbook.php?page=' . $i . '">' . $i . '</a> ';  
  14. }  
  15.   
  16. //Nous avons decidé d'utiliser un tableau pour afficher cette etiquette.  
  17. echo'<table width=100%>  
  18. <tr>  
  19. <th width=10% bgcolor=green> pseudo</th>  
  20. <th width=90% bgcolor=green>Message</font></th>  
  21. </tr>  
  22. </table>';  
  23.   
  24. if (isset($_GET['page']))  
  25. {  
  26. // On récupère le numéro de la page indiqué  dans l'adresse (ex: guestbook.php?page=4)  
  27.     $page = $_GET['page'];   
  28. }  
  29. else // si la variable n'existe pas alors c'est la première fois qu'on charge la page.  
  30. {  
  31. // alors on va afficher la page 1 qui va contenir les dernier messages.  
  32.  $page = 1;   
  33. }  
  34.   
  35. // maintenant calcule le numéro du premier message .  
  36. $premierMessageAafficher = ($page - 1) * 30;  
  37.   
  38. $reponse = mysql_query('SELECT * FROM guestbook ORDER BY id DESC LIMIT ' .   
  39. $premierMessageAafficher . ', ' . 30);  
  40.   
  41. while ($d= mysql_fetch_array($reponse))  
  42. {  
  43. ?>  
  44. <table>  
  45. <tr>  
  46. <td width=900px bgcolor=#6495ED>  
  47. <?php  echo '<b>'.$d['pseudo'].' </b><br/> '.$d['date'].''; ?>  
  48. </td>  
  49. <td width=90% bgcolor=#cccccc>  
  50. <?php  echo $d['message'] ; ?>  
  51. </td>  
  52.   
  53.   
  54. </table>  
  55.       
  56.       
  57. <?php        
  58. }  
  59.   
  60. mysql_close(); // on ferme la connexion à MySQL  
  61. ?>     

Notre TP s’arrête là, si vous avez une question, rendez-vous sur le forum.




Une question? Cliquez ici pour la poser.

Retour sur le portail du PHP