[Plan du site]
Vous êtes ici ---
> Le Site du Zéro
> Les tutoriels
> Non-Officiels
> Site Web
> PHP
> Systèmes complets
> Créer son forum de toutes pièces > Les pages membres > Messages privés
> Lecture du tutoriel
Messages privés
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)
On va voir dans ce chapitre comment ajouter un système plus que pratique sur votre forum : il s'agit de la messagerie privée. En quoi ça consiste ? Simplement à pouvoir envoyer les messages que seule une personne pourra lire (d'où le nom, en fait

).
Ça peut paraître un peu compliqué au premier abord, mais en fait, ce sont exactement les mêmes méthodes que celles qu'on a utilisées précédemment, à quelques différences près.
Le code de cette page est
long, parce qu'il n'y a qu'une seule page pour tout le système. Vous êtes prévenus.
Avant de commencer le code php proprement dit, il faut s'arrêter 5 minutes pour étudier un peu la question.
Voici donc ce que le système de messagerie privée (je dirai mp par la suite, je ne vous fais pas l'affront de vous dire pourquoi

) permettra de faire, une fois terminé.
- Envoyer un message privé (on dit aussi un mp)
- Répondre à un mp reçu
- Afficher tous les mp reçus
- Supprimer un mp reçu
- Et enfin, lire un mp reçu.
Ce sont les fonctions principales ; vous pouvez également rajouter une boîte d'envoi, qui liste les messages déjà envoyés (vous verrez, ce n'est qu'une petite modification dans le code) ; mais sinon, tout y est.
La base de données
Vous vous souvenez ? Au début de ce tutoriel, j'avais parlé d'une table
forum_mp en laissant planer le suspense quant à son contenu...
Après une longue attente, voici le verdict :
Code : SQL 1
2
3
4
5
6
7
8
9
10 | CREATE TABLE `forum_mp` (
mp_id int(11) NOT NULL AUTO_INCREMENT,
mp_expediteur int(11) NOT NULL,
mp_receveur int(11) NOT NULL,
mp_titre varchar(100) collate latin1_general_ci NOT NULL,
mp_text text collate latin1_general_ci NOT NULL,
mp_time int(11) NOT NULL,
mp_lu enum('0','1') collate latin1_general_ci NOT NULL,
PRIMARY KEY (`mp_id`)
)
|
Le rôle de chaque champ est assez simple à assimiler avec son nom :
mp_id correspond à l'id du mp, on a ensuite les id respectives de l'expéditeur et du destinataire.
Enfin, des infos sur le message lui-même, telles que le titre, le texte et la date.
Quant à
mp_lu, il prend la valeur 1 si le message a déjà été lu, et 0 si ce n'est pas le cas. Pourquoi ? Parce que l'image qu'on va afficher sera différente selon ces deux cas.
La page php
Bon, on va pouvoir passer aux choses sérieuses. Comme je l'ai dit en introduction, on ne va réaliser qu'une seule page pour tout le système de Mp. Mais comme on peut faire plusieurs choses sur cette page (lire, poster, etc.), il va falloir se référer à une variable passée par url, puis utiliser un switch.
Plus concrètement, regardez la structure :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | <?php
$action = htmlspecialchars($_GET['action']); //On récupère la valeur de la variable $action
switch($action)
{
case "consulter": //1er cas : on veut lire un mp
//Ici on a besoin de la valeur de l'id du mp que l'on veut lire
break;
case "nouveau": //2eme cas : on veut poster un nouveau mp
//Ici on a besoin de la valeur d'aucune variable :p
break;
case "repondre": //3eme cas : on veut répondre à un mp reçu
//Ici on a besoin de la valeur de l'id du membre qui nous a posté un mp
break;
case "supprimer": //4eme cas : on veut supprimer un mp reçu
//Ici on a besoin de la valeur de l'id du mp à supprimer
break;
default; //Si rien n'est demandé ou s'il y a une erreur dans l'url, on affiche la boite de mp.
} //fin du switch
?>
|
Vous comprenez maintenant pourquoi le code de la page va être assez lourd.
Mais au fait, on n'a pas donné le nom à cette page ! Si vous avez regardé les codes précédents, vous avez pu apercevoir qu'un lien est fait vers une page intitulée :
messagesprives.php ; c'est donc le nom que j'ai choisi.
Début de la page
Vous pouvez deviner facilement pourquoi, dans cette page, on va avoir besoin de poster des messages. C'est donc le grand retour du bbcode et donc de la variable
$balises.
Page : messagesprives.php
Code : PHP1
2
3
4
5
6
7
8
9 | <?php
//Cette fonction doit être appelée avant tout code html
session_start();
$balises = true;
//On donne ensuite un titre à la page, puis on appelle notre fichier debut.php
$titre = "Messages privés";
include("includes/debut.php");
include("includes/bbcode.php");
?>
|
Je vous renvoie à la page poster.php si vous ne comprenez pas ce bout de code.
Il permet de faire fonctionner le bbcode et ainsi, lorsque les membres de votre forum voudront poster un mp, ils pourront le mettre en forme, comme un message normal, finalement.
Pour la suite, on va simplement récupérer la valeur de la variable
$action, puis lancer le switch.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12 | <body>
<div id="banniere"></div>
<div id="corps_forum">
<h1>Boîte de Messagerie</h1><br /><br />
<?php
include("includes/identifiants.php");
mysql_connect($adresse, $nom, $motdepasse);
mysql_select_db($database);
$action = htmlspecialchars($_GET['action']);
switch($action)
{
|
Voilà : vous êtes prêts à continuer, maintenant !
Le design
Une dernière chose avant de s'attaquer au contenu propre de chaque partie de la page : un petit tour par le fichier css. Comme d'habitude, il n'est pas nécessaire de faire ceci, mais ça permet au tableau qui listera les mp de ressembler à quelque chose au moins

.
Code : CSS1
2
3 | .mp_titre { width:65%; }
.mp_expediteur { width:10%; }
.mp_time { width:20%; }
|
Il vous faudra aussi deux images : l'une pour le mp non lu, et l'autre pour le mp déjà lu.
Une fois que vous vous êtes équipés, on va pouvoir attaquer la suite.
La première partie de notre switch - ce n'est pas très logique mais bon, c'est comme ça

- est la lecture d'un message. Comme je l'ai dit plus haut, on a besoin de la valeur de l'id du message à lire qu'on va récupérer dans l'url.
Donc, le début du code est très classique :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 | <?php
case "consulter": //Si on veut lire un message
echo'<p><a href="./messagesprives.php">
Revenir à la boîte de messagerie</a></p>';
$id_mess = (int) $_GET['id']; //On récupère la valeur de l'id
//La requête nous permet d'obtenir les infos sur ce message :
$requete = mysql_query('SELECT
mp_expediteur, mp_receveur, mp_titre,
mp_time, mp_text, mp_lu, membre_id, membre_pseudo, membre_avatar,
membre_localisation, membre_inscrit, membre_post, membre_signature
FROM forum_mp
LEFT JOIN forum_membres ON membre_id = mp_expediteur
WHERE mp_id = "'.$id_mess.'"');
$data = mysql_fetch_assoc($requete);
// Attention ! Seul le receveur du mp peut le lire !
if ($_SESSION['id'] != $data['mp_receveur'])
{
exit("Vous n avez pas le droit d être ici</div></body></html>");
}
//bouton de réponse
echo'
<p>
<a href="./messagesprives.php?action=repondre&dest='.$data['mp_expediteur'].'">
<img src="./images/repondre.gif" alt="Répondre"
title="Répondre à ce message" /></a></p>';
?>
|
On retrouve dans la requête les jointures SQL qui vont nous permettre d'afficher en plus des infos sur le membre.
En fait, c'est exactement comme la page voirtopic.php, si on regarde bien... La seule différence est qu'on affiche seulement un message (donc, plus besoin de boucle), et qu'on peut accéder à cette page seulement si on est la bonne personne. D'où la présence de la fonction
exit(), qui arrête l'exécution du script en cas de problème.
La suite est simplement l'affichage du message, comme le fait la page affichant les topics.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 | <table>
<tr>
<th class="vt_auteur"><strong>Auteur</strong></th>
<th class="vt_mess"><strong>Message</strong></th>
</tr>
<tr>
<td>
<?php echo'<strong>
<a href="./voirprofil.php?m='.$data['membre_id'].'&action=consulter">
'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a></strong></td>
<td>Posté à '.date('H\hi \l\e d M Y',$data['mp_time']).'</td>';
?>
</tr>
<tr>
<td>
<?php
//Ici des infos sur le membre qui a envoyé le mp
echo'<p><img src="./images/avatars/'.$data['membre_avatar'].'" alt="" />
<br />Membre inscrit le '.date('d/m/Y',$data['membre_inscrit']).'
<br />Messages : '.$data['membre_post'].'
<br />Localisation : '.stripslashes(htmlspecialchars($data['membre_localisation'])).'</p>
</td><td>';
echo''.code(nl2br(stripslashes(htmlspecialchars($data['mp_text'])))).'<hr />'.code(nl2br(stripslashes(htmlspecialchars($data['membre_signature'])))).'
</td></tr></table>';
|
Rien de bien nouveau, finalement

.
C'est presque terminé: il reste juste à voir si le message est nouveau, auquel cas on va devoir modifier la valeur de
mp_lu.
Code : PHP 1
2
3
4
5
6
7
8
9
10 | <?php
if ($data['mp_lu'] == 0) //Si le message n'a jamais été lu
{
mysql_query("UPDATE forum_mp
SET mp_lu = '1'
WHERE mp_id= ".$id_mess."");
}
break; //La fin !
?>
|
La partie "lire un mp" est terminée. Il est donc possible de consulter les messages qu'on a reçus... pas très pratique, vu qu'on ne peut pas encore en envoyer

. Bah, on va régler ça de suite

.
On va donc voir dans cette partie comment poster un mp, puis comment supprimer un mp de sa boîte de messagerie.
Alors commençons dans l'ordre.
Nouveau mp
Le premier cas est aussi le plus classique : poster un nouveau mp. Par "nouveau" j'entends que l'identité du destinataire est décidé au moment de poster le message.
Pour le reste, rien de bien nouveau par rapport à la page poster.php, le code sera très similaire.
Mais t'as dit qu'il n'y aurait qu'une seule nouvelle page : comment on va faire pour traiter le message envoyé ?
On va réutiliser la page postok.php, pardi ! Il suffira pour cela d'ajouter deux nouvelles options dans le switch.
Allez, sans plus tarder, le code !
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | <?php
case "nouveau": //Nouveau mp
echo'<p><a href="./index.php">Index du forum</a> /
<a href="./messagesprives.php">
Revenir à la boîte de messagerie</a></p>';
?>
<form method="post" action="postok.php?action=nouveaump" name="formulaire">
<p>
<label for="to">Envoyer à : </label>
<input type="text" size="30" id="to" name="to" />
<br />
<label for="titre">Titre : </label>
<input type="text" size="80" id="titre" name="titre" />
<br /><br />
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
<br /><br />
<img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" />
<img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(':lol:');return(false)" />
<img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" />
<img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" />
<img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" />
<img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" />
<img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" />
<img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" />
<img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" />
<textarea cols="80" rows="8" id="message" name="message"></textarea>
<br />
<input type="submit" name="submit" value="Envoyer" />
<input type="reset" name="Effacer" value="Effacer" /></p>
</form>
<?php
break;
|
Ça vous rappelle de bons souvenirs

? Vous voyez qu'on envoie le formulaire à la page
postok.php?action=nouveaump, c'est donc la valeur de la variable
$action que nous allons traiter bientôt.
Vous remarquez aussi cette ligne :
Code : HTML1 | <label for="to">Envoyer à : </label><input type="texte" cols=30 rows=1 id="to" name="to" />
|
C'est ici que le membre qui envoie un mp devra écrire le nom du destinataire, tout simplement.
Réponse
Imaginez-vous en train de recevoir un mp d'une admiratrice (ou d'un admirateur) fou de vous, vous vous apprêtez à lui répondre, et là... paf ! Vous oubliez son pseudo et vous vous dites, "arf, si seulement on pouvait cliquer sur un bouton et lui répondre directement"

.
Derrière cet exemple se cache l'utilité de ce que l'on va voir tout de suite. En effet, en cliquant sur le bouton "répondre", l'id du destinataire sera directement affiché dans l'url, ce qui permet de lui envoyer directement le message.
Bien sûr, le code est très proche de celui qu'on a vu au-dessus : la différence majeure, c'est qu'on n'a pas besoin de la ligne.
Code : HTML1 | <label for="to">Envoyer à : </label><input type="text" size=30 id="to" name="to" />
|
Allez hop, le code :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | <?php
case "repondre": //On veut répondre
echo'<p><a href="./index.php">Index du forum</a> /
<a href="./messagesprives.php">Revenir à la boîte de messagerie</a></p>';
$dest = (int) $_GET['dest'];
?>
<form method="post" action="postok.php?action=repondremp&dest=<?php echo $dest ?>" name="formulaire">
<p>
<label for="titre">Titre : </label><input type="text" size="80" id="titre" name="titre" />
<br /><br />
<input type="button" id="gras" name="gras" value="Gras" onClick="javascript:bbcode('[g]', '[/g]');return(false)" />
<input type="button" id="italic" name="italic" value="Italic" onClick="javascript:bbcode('[i]', '[/i]');return(false)" />
<input type="button" id="souligné" name="souligné" value="Souligné" onClick="javascript:bbcode('[s]', '[/s]');return(false)" />
<input type="button" id="lien" name="lien" value="Lien" onClick="javascript:bbcode('[url]', '[/url]');return(false)" />
<br /><br />
<img src="./images/smileys/heureux.gif" title="heureux" alt="heureux" onClick="javascript:smilies(':D');return(false)" />
<img src="./images/smileys/lol.gif" title="lol" alt="lol" onClick="javascript:smilies(':lol:');return(false)" />
<img src="./images/smileys/triste.gif" title="triste" alt="triste" onClick="javascript:smilies(':triste:');return(false)" />
<img src="./images/smileys/cool.gif" title="cool" alt="cool" onClick="javascript:smilies(':frime:');return(false)" />
<img src="./images/smileys/rire.gif" title="rire" alt="rire" onClick="javascript:smilies('XD');return(false)" />
<img src="./images/smileys/confus.gif" title="confus" alt="confus" onClick="javascript:smilies(':s');return(false)" />
<img src="./images/smileys/choc.gif" title="choc" alt="choc" onClick="javascript:smilies(':O');return(false)" />
<img src="./images/smileys/question.gif" title="?" alt="?" onClick="javascript:smilies(':interrogation:');return(false)" />
<img src="./images/smileys/exclamation.gif" title="!" alt="!" onClick="javascript:smilies(':exclamation:');return(false)" />
<br /><br />
<textarea cols="80" rows="8" id="message" name="message"></textarea>
<br />
<input type="submit" name="submit" value="Envoyer" />
<input type="reset" name="Effacer" value="Effacer"/>
</p></form>
<?php
break;
?>
|
Vous comprenez maintenant pourquoi le code de cette page est si lourd... C'est pourquoi je vous conseille d'insérer toute la partie qui affiche les boutons de mise en forme du texte, ou encore les smilies, dans un fichier que vous inclurez à chaque fois qu'il faudra. Cela aura le mérite d'améliorer considérablement la lisibilité du code.
Passons... Et voyons à présent le traitement

.
Traitement des mp
Avant de poursuivre, il va falloir que vous ressortiez la page
postok.php. Si vous regardez, vous allez vous rendre compte que tout est articulé autour d'un switch. Il va donc nous suffire d'ajouter 2 cas : 1 pour la réponse du mp, et l'autre pour les nouveaux mp.
Voilà comment on va faire :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | <?php
case "repondremp": //Si on veut répondre
//On passe le message et le titre dans une série de fonction
$message = mysql_real_escape_string($_POST['message']);
$titre = mysql_real_escape_string($_POST['titre']);
$temps = time();
//On récupère la valeur de l'id du destinataire
$dest = (int) $_GET['dest'];
//Enfin on peut envoyer le message
mysql_query("INSERT INTO forum_mp
(mp_id, mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu)
VALUES (',', '".intval($_SESSION['id'])."' , '".$dest."', '".$titre."',
'".$message."', '".$temps."', '0')")
or die ("Le message n'a pas pu être envoyé, veuillez réessayer");
echo'<p>Votre message a bien été envoyé!<br />
<br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du
forum<br />
<br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner
à la messagerie</p>';
break;
?>
|
C'est tout classiquement une page de traitement basique, on récupère les données, et on les insère dans la base de données. Vous avez sûrement fait ça des dizaines de fois.
La partie suivante va demander un peu plus de vérification, parce qu'il faut s'assurer que le nom entré correspond bien à celui d'un utilisateur.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 | <?php
case "nouveaump": //On envoie un nouveau mp
//On passe le message et le titre dans une série de fonction
$message = mysql_real_escape_string($_POST['message']);
$titre = mysql_real_escape_string($_POST['titre']);
$temps = time();
$dest = mysql_real_escape_string($_POST['to']);
//On récupère la valeur de l'id du destinataire
//Il faut déja vérifier le nom
$requete = mysql_query('SELECT membre_id FROM forum_membres
WHERE membre_pseudo = "'.$dest.'"');
if($data = mysql_fetch_assoc($requete))
{
//Enfin on peut envoyer le message
mysql_query("INSERT INTO forum_mp
(mp_id, mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu)
VALUES (',', '".intval($_SESSION['id'])."' , '".$data['membre_id']."',
'".$titre."', '".$message."', '".$temps."', '0')")
or die ("Le message n'a pas pu être envoyé, veuillez réessayer");
echo'<p>Votre message a bien été envoyé!
<br /><br />Cliquez <a href="./index.php">ici</a> pour revenir à l index du
forum<br />
<br />Cliquez <a href="./messagesprives.php">ici</a> pour retourner à
la messagerie</p>';
}
//Sinon l'utilisateur n'existe pas !
else
{
echo'<p>Désolé ce membre n existe pas, veuillez vérifier et
réessayez à nouveau.</p>';
}
break;
?>
|
Voilà

. La vérification se fait de la façon suivante : on lance la requête avec le nom donné par l'expéditeur. S'il n'y a aucun problème, on affiche la suite, sinon un message d'erreur, et on recommence.
A partir de maintenant, vous pouvez sans problème poster de nouveaux mp à n'importe qui. Il nous reste à voir comment supprimer un mp de sa boîte.
Suppression d'un mp
Ça doit sûrement vous paraître étrange d'aborder ceci dans cette partie, mais c'est le plus pratique, finalement.
Il s'agit donc simplement de supprimer un mp de sa boîte en cliquant sur un lien contenant l'id du mp, et également une variable appelée
sur. Celle-ci va permettre de distinguer 2 cas : dans le premier, on a cliqué sur "supprimer", mais peut-être par erreur... Il serait un peu cruel de virer directement le message : donc, on redemande, puis enfin on exécute la suppression.
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 | <?php
case "supprimer":
//On récupère la valeur de l'id
$id_mess = (int) $_GET['id'];
//Il faut vérifier que le membre est bien celui qui a reçu le message
$requete = mysql_query('SELECT mp_receveur
FROM forum_mp WHERE mp_id = '.$id_mess.'');
$data = mysql_fetch_assoc($requete);
//Sinon la sanction est terrible :p
if ($_SESSION['id'] != $data['mp_receveur'])
{
exit("Vous n avez pas le droit d être ici </div></body></html>");
}
//2 cas pour cette partie : on est sûr de supprimer ou alors on ne l'est pas
$sur = (int) $_GET['sur'];
//Pas encore certain
if ($sur == 0)
{
echo'<p>Etes-vous certain de vouloir supprimer ce message ?<br />
<a href="./messagesprives.php?action=supprimer&id='.$id_mess.'&sur=1">
Oui</a> - <a href="./messagesprives.php">Non</a></p>';
}
//Certain
else
{
mysql_query("DELETE from forum_mp WHERE mp_id = '".$id_mess."'")
or die (mysql_error());
echo'<p>Le message a bien été supprimé.<br />
Cliquez <a href="./messagesprives.php">ici</a> pour revenir à la boite
de messagerie.</p>';
}
break;
?>
|
On est arrivés au bout. Vous avez remarqué qu'il faut encore une fois vérifier que le membre qui demande la suppression est bien celui qui a reçu le mp. Dans le cas contraire, n'importe qui en modifiant simplement l'id du message pourrait s'en débarrasser.
On arrive à la fin du switch : il va falloir définir ce qu'on affichera par défaut. Pour cela, j'ai décidé de mettre la boîte de messagerie, mais après tout, vous pouvez aussi en faire une partie à elle seule. C'est vraiment comme vous le sentez

. Quoi qu'il en soit, voilà ce que j'ai fait :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 | <?php
//Si rien n'est demandé ou s'il y a une erreur dans l'url
//On affiche la boite de mp.
default;
echo'<p><a href="./index.php">Index du forum</a></p>';
$requete = mysql_query('SELECT mp_lu, mp_id, mp_expediteur, mp_titre,
mp_time, membre_id, membre_pseudo
FROM forum_mp
LEFT JOIN forum_membres ON forum_mp.mp_expediteur = forum_membres.membre_id
WHERE mp_receveur = '.intval($_SESSION['id']).' ORDER BY mp_id DESC')
or die(mysql_error());
echo'<p><a href="./messagesprives.php?action=nouveau">
<img src="./images/nouveau.gif" alt="Nouveau" title="Nouveau message" />
</a></p>';
if (mysql_num_rows($requete) > 0)
{
?>
<table>
<tr>
<th></th>
<th class="mp_titre"><strong>Titre</strong></th>
<th class="mp_expediteur"><strong>Expéditeur</strong></th>
<th class="mp_time"><strong>Date</strong></th>
<th><strong>Action</strong></th>
</tr>
<?php
//On boucle et on remplit le tableau
while ($data = mysql_fetch_assoc($requete))
{
echo'<tr>';
//Mp jamais lu, on affiche l'icone en question
if($data['mp_lu'] == 0)
{
echo'<td><img src="./images/message_non_lu.gif" alt="Non lu" /></td>';
}
else //sinon une autre icone
{
echo'<td><img src="./images/message.gif" alt="Déja lu" /></td>';
}
echo'<td id="mp_titre">
<a href="./messagesprives.php?action=consulter&id='.$data['mp_id'].'">
'.stripslashes(htmlspecialchars($data['mp_titre'])).'</a></td>
<td id="mp_expediteur">
<a href="./voirprofil.php?action=consulter&m='.$data['membre_id'].'">
'.stripslashes(htmlspecialchars($data['membre_pseudo'])).'</a></td>
<td id="mp_time">'.date('H\hi \l\e d M Y',$data['mp_time']).'</td>
<td>
<a href="./messagesprives.php?action=supprimer&id='.$data['mp_id'].'&sur=0">
supprimer</a></td></tr>';
}
echo '</table>';
} //Fin de la boucle
else
{
echo'<p>Vous n avez aucun message privé pour l instant, cliquez
<a href="./index.php">ici</a> pour revenir à la page d index</p>';
}
}
mysql_close();
?>
</div>
</body>
</html>
|
Voilà. On a terminé la partie messagerie et en prime, on est au bout de la page (c'est pas beau, ça ?

).
Donc si on résume, qu'est-ce qu'on a fait ?
Tout d'abord, on lance une requête qui récupère des infos sur les messages qu'on a reçus. Une simple jointure nous permet d'obtenir par la même occasion le nom de l'expéditeur.
Vous remarquez qu'ici on n'a pas besoin de vérifier que l'id du membre qui consulte la messagerie est bien la bonne : en effet, on utilise la variable
$_SESSION['id'] pour savoir ce qui va s'afficher.
Par la suite, il s'agit d'une boucle, et d'un tableau qui se remplit le plus classiquement possible

.
C'est bon, le système de messagerie privée est entièrement mis en place.
Il reste toutefois une remarque à faire : sur le Site du Zér0, vous avez vu que les mp prennent la forme d'un topic où
jusqu'à 6 personnes peuvent discuter (cela dit, vous pouvez en ajouter autant que vous voulez

). Si vous voulez faire la même chose, ce n'est pas très compliqué : il suffit pour cela de reprendre les méthodes utilisées pour les topics. Il va donc falloir reprendre un peu la structure de la base de données.
Ça fait un peu de boulot, mais le résultat en vaut vraiment la peine, et puis le script n'est pas très compliqué, il suffit d'avoir compris les jointures et c'est réglé.
On est arrivés par la même occasion au bout des pages membres, et il est temps à présent de s'attaquer aux pages d'administration !