Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Les outils qu'il vous faut
Pour bien comprendre ce tutoriel, il vous faudra beaucoup de
réflexion, mais surtout de
bonnes bases en PHP. Je n'utilise pas de fonctions sortant du fin fond de la doc, mais il faudra connaître un tantinet le fonctionnement des arrays.
En revanche, vous n'aurez pas besoin d'être un "SQL Beginner ..." (Copyright Shepard

), car j'essaierai de vous expliquer du mieux que je le peux les diverses requêtes utilisées.
La configuration nécessaire
Pour la configuration, je pensais à celle de PHP et SQL. Ce qu'il faut :
- PHP 4 ou plus ;
- en ce qui concerne le SGBD, j'utilise MySQL, et il faut avoir au moins la version 4.1.1. Pour les autres, il faut une version qui accepte les fonctions sur les dates.
Je préfère vous prévenir que je ne vais pas m'occuper du système de membres, ce sera à vous de le faire. De toute façon, le système n'a besoin que d'une valeur, l'id du membre qui va sur la page, que j'appellerai $id_membre.
La liste des pages
Tant qu'à y être, voici la liste des pages que nous aurons :
- configuration.php, qui contiendra les valeurs de configuration que vous pourrez modifier à votre guise ;
- index.php, qui affichera la liste des MP ;
- lire.php, qui affichera les messages d'un MP ;
- poster.php, qui permettra de créer une nouvelle conversation ou de répondre ;
- supprimer.php, qui permettra de supprimer une conversation.
Dans les quatre dernières pages, il ne faudra pas oublier d'inclure le fichier configuration.php.
Configuration.php
D'ailleurs, tant qu'on en parle, cette page contient un tableau des valeurs de configuration. Vous pourrez ainsi modifier facilement votre système.
Code : PHP 1
2
3
4
5
6
7
8
9
10 | <?php
$config = array();
$config['nb_max_mp'] = 100; // Nombre maximum de MP
$config['nb_max_mess_mp'] = 30; // Nombre maximum de messages par MP
$config['nb_mp_par_page'] = 20; // Nombre de MP à afficher par page
$config['nb_mess_mp_par_page'] = 10; // Nombre de messages à afficher par page
$config['nb_participants_par_mp'] = 6; // Nombre maximum de participants par MP
?>
|
Je préfère prévenir : lorsque j'insère dans la BDD, j'utilise un mysql_real_escape_string sur les variables de texte où il n'y a pas les antislashes.
Lors de l'affichage, je fais un htmlspecialchars(stripslashes($variable)) sur les variables de texte. Pour l'affichage du texte contenant des retours à la ligne, j'utlise un nl2br. (Ne pas le faire lors de l'insertion, donc.)
Il y aura trois tables différentes :
- mp_sujets, qui contient la liste des MP ;
- mp_participants, qui contient la liste des participants ;
- mp_messages, qui contient la liste des messages.
Et aussi une table
membres, que je simplifierai au maximum.
D'ailleurs, commençons par la créer.
La table membres
Je n'y mettrai que deux valeurs,
membre_id - qui sera en clé primaire et en auto-incrémentation - et
membre_pseudo.
Code : SQL1
2
3
4
5 | CREATE TABLE membres (
membre_id mediumint(8) NOT NULL AUTO_INCREMENT,
membre_pseudo varchar(50) NOT NULL,
PRIMARY KEY membre_id (membre_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
Je signale juste que mettre des clés primaires permet un accès plus rapide à un enregistrement particulier de la table.
La table mp_sujets
Cette table contiendra la liste des MP, et n'aura que deux colonnes :
mp_id - qui sera en clé primaire et en auto-incrémentation - et
mp_titre. Toutes les autres données seront obtenues via les requêtes.
Code : SQL1
2
3
4
5 | CREATE TABLE mp_sujets (
mp_id mediumint(8) NOT NULL AUTO_INCREMENT,
mp_titre varchar(50) NOT NULL,
PRIMARY KEY mp_id (mp_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
La table mp_participants
Ici, il y a aura la
liste des participants pour tous les MP. Elle permettra aussi de savoir si le membre a
lu ou
non le MP, et aussi s'il l'a
supprimé. En fait, quand un membre décidera de supprimer un MP, on mettre ce champ à 1, et il n'y aura plus accès. Mais on ne supprimera rien, pour que les autres membres puissent encore y accéder. Si vous pensez que je laisse toutes mes données dans la BDD sans jamais en supprimer, détrompez-vous et attendez de voir la page
supprimer.php.
Code : SQL1
2
3
4
5
6
7
8 | CREATE TABLE mp_participants (
mp_id mediumint(8) NOT NULL,
membre_id mediumint(8) NOT NULL,
mpp_lu tinyint(1) NOT NULL DEFAULT '0',
mpp_supprimer tinyint(1) NOT NULL DEFAULT '0',
KEY mp_id (mp_id),
KEY membre_id (membre_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
La création d'index permet d'optimiser les requêtes
SELECT. Un index renvoie vers une clé primaire, et il est conseillé de donner aux deux colonnes le même nom et le même type pour plus d'optimisation encore.
La table mp_messages
Celle-ci contiendra la liste des messages de chaque membre pour chaque MP.
Code : SQL 1
2
3
4
5
6
7
8
9
10 | CREATE TABLE mp_messages (
mess_id int(11) NOT NULL AUTO_INCREMENT,
mp_id mediumint(8) NOT NULL,
membre_id mediumint(8) NOT NULL,
mess_temps datetime NOT NULL,
mess_texte text NOT NULL,
PRIMARY KEY (mess_id),
KEY mp_id (mp_id),
KEY membre_id (membre_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
Bon, je ne vais pas trop développer.
mess_id est l'
id du message,
mess_temps la
date d'envoi (je préfère utiliser un champ
datetime plutôt qu'un
timestamp) et
mess_texte le
texte du message.
mp_id contiendra l'
id du MP du message, et
membre_id l'auteur du message. Ces deux colonnes sont en
index, pour permettre, comme tout à l'heure, une optimisation des requêtes
SELECT.
Donc ça y est, tout est créé : on peut maintenant commencer à coder.