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 :
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é :
| <?
$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"> 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"> </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.
|