javascript, javascripts, js, jscript, scripts, script, html, dhtml, dynamic, cookies, menu, frames, formulaire, source, code, gratuit, exemple, developper, html, php4, php3, php, mysql, liens, php2, forum, livre d'or, pages, web, dynamiques, programmation, webmasters, webmestres, tutorial, tutoriel, annuaires, espace, membres, banniéres, caddies, chats, compteurs, formulaires, forums, gestion, documentations, news, mailing, list, newsletter, moteurs, recherche, sondages, votes, statistiques, autres, agendas, calendriers, mail, annonces, audio, outils, réseaux, graphique, recommandation, site, sécurité, portail, creation, actualité, moteur de recherche, moteur, trucs, astuces, services, flash, action script, actionscript Tutoriaux : Php/MySQL
Script Masters : Javascript, Php, Mysql, html pour Webmasters!
 
    Script Masters
 
    Espace membre
 
    Langages
 
    Autres ressources
 
    Emploi avec Jobintree
 
    Ressources graphiques
 
    Recherche
 
    Kit graphique
 
    Liens
 
    Statistiques


 


Télécharger les sources de cet article


Untitled Document
Réalisation d'un livre d'or avec PHP & MySQL


Tutorial écrit par : Webdeb73 - Webmaster-Débutant.net

 

   Introduction

 

 

Dans ce nouveau tutorial, je vais vous présenter de la façon la plus claire possible, comment réaliser un script de livre d’or pour votre site codé en PHP et utilisant une table SQL. Comme vous le savez tous, un livre d’or permet à vos visiteurs de laisser une appréciation concernant votre site, ce qui vous permettra par la suite d’apporter vos améliorations à ce dernier pour le rendre plus attrayant.

 

Description de notre script


Pour réaliser notre livre d’or, nous aurons tout d’abord besoin d’une base de données MySQL ainsi que de 2 fichiers php :

- guestbook.php (fichier du livre d’or)
- config.php (fichier stockant les variables de connexion à la base de données)

Notre script sera le plus simple possible afin que vous puissiez comprendre facilement le principe de dialogue entre PHP et MySQL, mais aussi la syntaxe de ce puissant langage et enfin le traitement des données extraites d’un formulaire HTML. En effet, afin d’éviter de nous surcharger avec une multitude de variables et pour rester le plus clair possible, nous limiterons notre formulaire à 3 champs :

- Pseudo
- Email
- Commentaire

Nous verrons quand même brièvement à la fin de ce tutorial comment nous pouvons améliorer notre script pour le rendre encore plus sympathique à utiliser (ex : ajoût de smylies).

 

Réalisation
 

C’est ici que commence réellement la conception de notre livre d’or. Nous allons donc débuter par la création de la table SQL qui se charge de stocker tous les messages du livre d’or. Dans votre interface de gestion de base de données (ex : PHPMyAdmin), exécuter la structure de table suivante :

Structure de la table :
CREATE TABLE guestbook (
id INT(3) AUTO_INCREMENT PRIMARY KEY,
pseudo VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL,
message TEXT NOT NULL,
date VARCHAR(21) NOT NULL
);

Vous constatez que nous avons créé une table comportant 5 champs. Le premier champ que l’on nomme « id » est la clé primaire de la table et est automatiquement incrémenté (augmenté de 1) à chaque nouveau message enregistré. Pour les autres champs, il est inutile de s’y attarder car ils ne présentent que peu d’importance dans la réalisation du script PHP. J’insiste juste sur le fait que VARCHAR(X) signifie que ce champ peut contenir au maximum X caractères et qu’il ne peut être vide (NOT NULL).
Si vous souhaitez approfondir le sujet, consultez le tutorial sur la manipulation de table sous MySQL.

De plus, je rappelle qu’il est important de mettre des noms évocateurs aux champs de sa table pour une meilleure compréhension et réalisation des scripts.

Passons désormais à l’écriture de notre fichier de configuration des variables de connexion à la base de données. Je n’ajouterai que peu de choses concernant ce listing du fait qu’il soit commenté :

 

Listing 1 : config.php
<?

$serveur = 'XXXXX'; // Votre serveur. Ex : localhost.
$login = 'XXXXX'; // Votre Login de connexion à la base.
$pass = 'XXXXX'; // Votre Password de connexion à la base.
$base = 'XXXXX'; // Le Nom de votre Base de Données.
$nb = 10; // Nombre de messages max par page.

//------A partir de la touchez plus à rien --------------------//

$now_Y = date("Y");
$now_m = date("m");
$now_d = date("d");
$now_H = date("H");
$now_i = date("i");
$now_s = date("s");

$date = "$now_d-$now_m-$now_Y à $now_H:$now_i:$now_s";

@MYSQL_CONNECT($serveur,$login,$pass) or die ("Le Serveur ne répond pas");
@MYSQL_SELECT_DB("$base") or die ("Connexion à la base $base impossible");

?>

 

Comme vous pouvez le voir, nous avons créé la date du jour du type JJ/MM/AAAA à HH :MM :SS à l’aide de la variable $date. De plus, nous réalisons la connexion au serveur MySQL distant avec la fonction MYSQL_CONNECT() ; ainsi que la sélection de la base de données à l’aide de la fonction MYSQL_SELECT_DB() ;. Si une erreur apparaît au cours de l’une de ces deux opérations, un message d’erreur sera affiché grâce à la fonction DIE() ;.

Ceci étant fait, nous pouvons nous consacrer à la réalisation du script principal du livre d’or, c’est à dire, le fichier guestbook.php qui contient à la fois le formulaire d’envoi du message mais aussi la portion de script qui se charge d’afficher un à un les messages enregistrés dans la table SQL.

Je vais vous présenter la page guestbook.php par morceaux afin de bien détailler chaque détail important. Voici donc tout d’abord la partie qui contient le formulaire compris entre les deux balises <form></form> :

 

Listing 2 : guestbook.php (formulaire)
<?

include ‘config.php’;

// Test du champ caché posted.

if($posted)
{

// Si tous les champs sont remplis.

if(!empty($pseudo) AND !empty($email) AND !empty($message))
{

// On nettoie les données (sauts de ligne en trop…).

$pseudo = trim(ucfirst($pseudo));
$email = trim($email);
$message = trim(ucfirst($message));

// On définit la requête d’insertion.

$insert = "INSERT INTO guestbook VALUES(‘’,’$pseudo’,’$email’,’$message’,’$date’) ";

// On exécute l’insertion des données dans la table.

$query = mysql_query($insert) OR die("Impossible d’ajouter le message ! ");

// On affiche un message de remerciement au visiteur.

echo '<script>';
echo 'alert("Votre message nous a été transmis avec succès ! Merci !");';
echo '</script>';

}
else // sinon on affiche un message d’erreur et on redirige.
{
echo '<script>';
echo 'alert("Tous les champs obligatoires ne sont pas remplis !");';
echo 'javascript:history.back(1);';
echo '</script>';
}
}
?>
<html>
<head>
<title>Livre d'or</title>
</head>
<body>
<form action="<? echo $PHP_SELF ?>" method="POST">
<input type="hidden" name="posted" value="1">
<div align="center">
<center>
<table border="0" cellpadding="4" cellspacing="5" width="60%" height="107" style="border-style: solid; border-width: 0">
<tr>
<td width="32%" height="22" style="border: 1 solid #008000">Votre Pseudo :</td>
<td width="68%" height="22" style="border: 1 solid #008000"><input type="text" name="pseudo" size="46"></td>
</tr>
<tr>
<td width="32%" height="21" style="border: 1 solid #008000">Votre Email :</td>
<td width="68%" height="22" style="border: 1 solid #008000"><input type="text" name="email" size="46"></td>
</tr>
<tr>
<td width="32%" height="21" valign="top" style="border: 1 solid #008000">Votre Message</td>
<td width="68%" height="21" style="border: 1 solid #008000"><textarea rows="9" name="message" cols="63"></textarea></td>
</tr>
<tr>
<td width="32%" height="21" style="border: 1 solid #008000"></td>
<td width="68%" height="21" style="border: 1 solid #008000"><input type="submit" value="Soumettre" name="submit">
<input type="reset" value="Recommencer" name="reset"></td>
</tr>
</table>
</center>
</div>
</form>

 

Je ne m’attarde pas sur le fonctionnement du script puisque je l’ai commenté mais je vais insisté sur quelques points importants.

Tout d’abord, nous incluons à l’aide de PHP le fichier config.php à la première ligne, ce qui va permettre le dialogue entre le script et la base de données. De plus, vous pouvez voir que les champs du formulaire ont chacun un nom (name= "XXXX") très explicite qui servira à PHP de variables lors de l’insertion (voir le nom des variables dans la requête INSERT INTO). Enfin, vous avez remarqué que nous avons ajouté un champ caché (hidden) dans la source HTML afin que nous puissions bien envoyer les données à la base.

Il est temps maintenant de voir maintenant la suite de la page, c’est à dire la partie qui affiche les messages. De la même façon je n’expliquerai que très peu le script car la source est commentée et simple à comprendre :

 

Listing 2 : guestbook.php (suite - affichage des messages)
<?

// On vérifie a quel endroit dans la table on récupère les messages.

if(!$start) {$start=0;}

// On effectue une requête de recherche et sélection des messages.

$rec = mysql_query("SELECT * FROM guestbook Order by id Desc LIMIT $start,$nb");

// On extrait les données une à une à l’aide d’une boucle While() ;

while ($row = mysql_fetch_array($rec))
{
?>
<div align="center">
<center>
<table border="0" cellpadding="4" cellspacing="0" width="60%">
<tr>
<td width="100%" style="border: 1 solid #000000">&nbsp;De <? echo $row[pseudo]; ?> le <? echo $row[date]; ?></td>
</tr>
<tr>
<td width="100%" style="border: 1 solid #000000"><? echo nl2br($row[message]); ?></td>
</tr>
</table>
</center>
</div>
<br><br>
<?
}

// On libère la mémoire cache après la requête.

mysql_free_result($rec);

// On compte le nombre d’enregistrements.

$result=mysql_query("SELECT COUNT(*) FROM guestbook");
$row=mysql_fetch_row($result);

// On utilise un script pour un affichage du nombre de pages :

if ($start == "0") {
echo"<b><font size=\"1\" face=\"Verdana\">[1]</font></b>";
} else {
echo"<a href=\"guestbook.php?start=0\">[1]</a> ";
}
for($index=1;($index*$nb)<$row[0];$index++) {
$pg = $index+1;
if(($index*$nb)!=$start) {
print("<a href=\"guestbook.php?start=".($index*$nb)."\">");
echo"[$pg]";
print("</a>");
}
else {
echo" <b><font size=\"1\" face=\"Verdana\">[$pg]</font></b>";
} }
?>
<p align="center">&nbsp;</p>
</body>
</html>

 

La source étant commentée, je vais approfondir quelques petites choses qui ne sont pas à négliger. Vous avez remarqué dans cette partie du script que nous avons extrait les données avec une boucle While(). C’est cette boucle qui est toujours utilisée pour l’extraction de données d’une table.
De plus, vous avez constaté des variables du type $row[XXX] ;. Ces variables sont celles qui stockent les données extraites de la table guestbook.
Notez au passage l’utilisation de la fonction nl2br() ; qui permet de convertir les sauts de ligne en balise <br />. Sans elle, les sauts de ligne de votre message n'apparaiterait pas une fois insérée dans le code HTML (si toutefois le visiteur en avait fait).

C’est tout ce qu’il y a d’important à savoir concernant ce script. Je ne ferais pas d’explications au sujet de la portion qui se charge de la pagination. Celui-ci meritant de faire l'objet d'un tutorial. Il est plus simple pour le moment de la copier telle quelle dans vos scripts quand vous en avez besoin.

Votre livre d’or est désormais opérationnel.


Optimisation
 

Voyons rapidement comment vous pouvez le rendre plus convivial en permettant l’ajout de smilies :

Si vous souhaitez afficher ce smilies ;-) par exemple en tant qu’image dans votre message, il suffit de positionner juste après l’accolade du While() ; le code ci-dessous. Nous allons supposer que l’image correspondante à ce smiley se nomme good.gif et qu’il se situe dans le répertoire /images/smiles/good.gif de votre site.

Voici la regex permettant cette transformation. Il faut en faire une pour chaque smiley :

 

Script :
<?php
$row[message] = str_replace(";-)","<img src=\"images/smiles/good.gif\">",$row[message]);
?>

 

Conclusion
 

Vous avez appris au travers de ce tutorial comment réaliser simplement un livre d’or pour votre site avec un outil puissant qui est le couple PHP et MySQL.

Les sources complètes de livre d'or ainsi que le tutorial au format pdf se trouvent dans dans l'archive disponible en téléchargement(voir enhaut).Vous pouvez modifier à votre guise cette source pour l’améliorer et la mettre aux couleurs de votre site.

@ Bientôt !

 

- Un problème? Posez vos questions sur le forum Php/MySQL!
- Ce tutorial a été consulté 24582 fois


Script Masters © Ce texte est la propriété de son auteur.
Toute reproduction est interdite.

 




 
 
Fabien Daniel - © 2001-2009 | Hebergement : OVH | CNIL : 796128