Aller au menu - Aller au contenu

Icône Messages privés

Avatar
Mise à jour : 30/11/2010
Difficulté : Facile Facile Creative Commons BY
4 145 visites depuis 7 jours, dont 128 sur ce chapitre classé 41/786
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. :diable:

Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Structure de la page

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 = (isset($_GET['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 que ma créativité en ce qui concerne les noms de page n'est plus à prouver :-° , voici donc le résultat : messagesprives.php.

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 : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
<?php
session_start();
$titre="Messages Privés";
$balises = true;
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/bbcode.php");
include("includes/menu.php");

$action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';

?>


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 a simplement récupéré la valeur de la variable $action, il reste maintenant à lancer le switch.

Code : PHP
1
2
3
4
<?php
switch($action) //On switch sur $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 : CSS
1
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. :pirate:

Lire un message

La première partie de notre switch - ce n'est pas très logique mais bon, c'est comme ça :p - 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
<?php
case "consulter": //Si on veut lire un message
 
    echo'<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a> --> Consulter un message</p>';
    $id_mess = (int) $_GET['id']; //On récupère la valeur de l'id
    echo '<h1>Consulter un message</h1><br /><br />';

    //La requête nous permet d'obtenir les infos sur ce message :
    $query = $db->prepare('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');
    $query->bindValue(':id',$id_mess,PDO::PARAM_INT);
    $query->execute();
    $data=$query->fetch();

    // Attention ! Seul le receveur du mp peut le lire !
    if ($id != $data['mp_receveur']) erreur(ERR_WRONG_USER);
       
    //bouton de réponse
    echo'<p><a href="./messagesprives.php?action=repondre&amp;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 erreur, qui arrête l'exécution du script en cas de problème.

Evidemment vous avez tout de suite remarqué la présence de la nouvelle constante ERR_WRONG_USER qui correspond à un message du type "Vous n'êtes pas le bon utilisateur nomdediou !"


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
27
<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'].'&amp;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
11
12
13
14
15
<?php
    if ($data['mp_lu'] == 0) //Si le message n'a jamais été lu
    {
        $query->CloseCursor();
        $query=$db->prepare('UPDATE forum_mp 
        SET mp_lu = :lu
        WHERE mp_id= :id');
        $query->bindValue(':id',$id_mess, PDO::PARAM_INT);
        $query->bindValue(':lu','1', PDO::PARAM_STR);
        $query->execute();
        $query->CloseCursor();
    }
        
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 :euh: . Bah, on va régler ça de suite ^^ .

Répondre, Poster, Supprimer

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
<?php
case "nouveau": //Nouveau mp
       
   echo'<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a> --> Ecrire un message</p>';
   echo '<h1>Nouveau message privé</h1><br /><br />';
   ?>
   <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 :lol: ? 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 : HTML
1
<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. :p

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 : HTML
1
<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><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a> --> Ecrire un message</p>';
   echo '<h1>Répondre à un message privé</h1><br /><br />';

   $dest = (int) $_GET['dest'];
   ?>
   <form method="post" action="postok.php?action=repondremp&amp;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
28
29
30
31
32
<?php
case "repondremp": //Si on veut répondre

    //On récupère le titre et le message
    $message = $_POST['message'];
    $titre = $_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

    $query=$db->prepare('INSERT INTO forum_mp
    (mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu)
    VALUES(:id, :dest, :titre, :txt, :tps, '0')'); 
    $query->bindValue(':id',$id,PDO::PARAM_INT);   
    $query->bindValue(':dest',$dest,PDO::PARAM_INT);   
    $query->bindValue(':titre',$titre,PDO::PARAM_STR);   
    $query->bindValue(':txt',$message,PDO::PARAM_STR);   
    $query->bindValue(':tps',$temps,PDO::PARAM_INT);   
    $query->execute();
    $query->CloseCursor(); 

    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
38
39
40
41
42
43
44
<?php
    case "nouveaump": //On envoie un nouveau mp

    //On récupère le titre et le message
    $message = $_POST['message'];
    $titre = $_POST['titre'];
    $temps = time();
    $dest = $_POST['to'];

    //On récupère la valeur de l'id du destinataire
    //Il faut déja vérifier le nom

    $query=$db->prepare('SELECT membre_id FROM forum_membres
    WHERE LOWER(membre_pseudo) = :dest');
    $query->bindValue(':dest',strotolower($dest),PDO::PARAM_STR);
    $query->execute();
    if($data = $query->fetch())
    {
        $query=$db->prepare('INSERT INTO forum_mp
        (mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu)
        VALUES(:id, :dest, :titre, :txt, :tps, :lu)'); 
        $query->bindValue(':id',$id,PDO::PARAM_INT);   
        $query->bindValue(':dest',(int) $data['membre_id'],PDO::PARAM_INT);   
        $query->bindValue(':titre',$titre,PDO::PARAM_STR);   
        $query->bindValue(':txt',$message,PDO::PARAM_STR);   
        $query->bindValue(':tps',$temps,PDO::PARAM_INT);   
        $query->bindValue(':lu','0',PDO::PARAM_STR);   
        $query->execute();
        $query->CloseCursor(); 

       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
37
38
<?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
    $query=$db->prepare('SELECT mp_receveur
    FROM forum_mp WHERE mp_id = :id');
    $query->bindValue(':id',$id_mess,PDO::PARAM_INT);
    $query->execute();
    $data = $query->fetch();
    //Sinon la sanction est terrible :p
    if ($id != $data['mp_receveur']) erreur(ERR_WRONG_USER);
    $query->CloseCursor(); 

    //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&amp;id='.$id_mess.'&amp;sur=1">
    Oui</a> - <a href="./messagesprives.php">Non</a></p>';
    }
    //Certain
    else
    {
        $query=$db->prepare('DELETE from forum_mp WHERE mp_id = :id');
        $query->bindValue(':id',$id_mess,PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor(); 
        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.

La boîte de Mp

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
<?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><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a>';
    echo '<h1>Messagerie Privée</h1><br /><br />';

    $query=$db->prepare('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 = :id ORDER BY mp_id DESC');
    $query->bindValue(':id',$id,PDO::PARAM_INT);
    $query->execute();
    echo'<p><a href="./messagesprives.php?action=nouveau">
    <img src="./images/nouveau.gif" alt="Nouveau" title="Nouveau message" />
    </a></p>';
    if ($query->rowCount()>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 = $query->fetch())
        {
            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&amp;id='.$data['mp_id'].'">
            '.stripslashes(htmlspecialchars($data['mp_titre'])).'</a></td>
            <td id="mp_expediteur">
            <a href="./voirprofil.php?action=consulter&amp;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&amp;id='.$data['mp_id'].'&amp;sur=0">supprimer</a></td></tr>';
        } //Fin de la boucle
        $query->CloseCursor();
        echo '</table>';

    } //Fin du if
    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>';
    }
} //Fin du switch
?>
</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 $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 :p ). 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 !
Chapitre précédent Sommaire Chapitre suivant

Partager

55 commentaires pour "Messages privés"
Note moyenne : 3.61 / 4 (349 votes)
Pseudo Commentaire
Hors ligne Oneill887 # Posté le 17/09/2011 à 10:21:50
Avatar
Validateurs

Ville : Stiring-wendel
Pays : France métropolitaine
Études : IUT Metz

marabou : si tu as des problèmes je t'invite à utiliser les forums qui sont plus adaptés. Les commentaires de tutos ne sont pas là pour exposer ses problèmes.

Merci.
 
Connecté superzero3 # Posté le 23/11/2011 à 12:29:56
Je suis un superzero
Groupe : Bannis

Bonjour, j'ai un problème avec mes messages privés. Quoi que je mette en destinataire, on me répond qu'il n'existe pas. Pouvez-vous m'aider ? Voici mon code : Secret (cliquez pour afficher)
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
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
        <meta charset="iso-8859-1" />
		<link rel="stylesheet" media="screen" type="text/css" title="Style" href="../Style.css" />
		<script type="text/javascript" src="../jquery.js"></script>
        <title>Messages privés</title>
		<script>
function bbcode(bbdebut, bbfin)
{
var input = window.document.formulaire.message;
input.focus();
if(typeof document.selection != 'undefined')
{
var range = document.selection.createRange();
var insText = range.text;
range.text = bbdebut + insText + bbfin;
range = document.selection.createRange();
if (insText.length == 0)
{
range.move('character', -bbfin.length);
}
else
{
range.moveStart('character', bbdebut.length + insText.length + bbfin.length);
}
range.select();
}
else if(typeof input.selectionStart != 'undefined')
{
var start = input.selectionStart;
var end = input.selectionEnd;
var insText = input.value.substring(start, end);
input.value = input.value.substr(0, start) + bbdebut + insText + bbfin + input.value.substr(end);
var pos;
if (insText.length == 0)
{
pos = start + bbdebut.length;
}
else
{
pos = start + bbdebut.length + insText.length + bbfin.length;
}
input.selectionStart = pos;
input.selectionEnd = pos;
}
 
else
{
var pos;
var re = new RegExp('^[0-9]{0,3}$');
while(!re.test(pos))
{
pos = prompt("insertion (0.." + input.value.length + "):", "0");
}
if(pos > input.value.length)
{
pos = input.value.length;
}
var insText = prompt("Veuillez taper le texte");
input.value = input.value.substr(0, pos) + bbdebut + insText + bbfin + input.value.substr(pos);
}
}
function smilies(img)
{
window.document.formulaire.message.value += '' + img + '';
}
</script>
    </head>
    <body onload="menu(6);">
<div id="en_tete"></div>
	<div id="menu"> <div class="element_menu">
   <?php include("menu.php"); ?></div></div>
   <br /><div id="corps">
<?php
session_start();
$titre="Messages Privés";
$balises = true;
include("includes/identifiants.php");
include("includes/debut.php");
include("includes/bbcode.php");
include("includes/menu.php");

$action = (isset($_GET['action']))?htmlspecialchars($_GET['action']):'';

switch($action){case "consulter": //Si on veut lire un message
 
    echo'<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a> --> Consulter un message</p>';
    $id_mess = (int) $_GET['id']; //On récupère la valeur de l'id
    echo '<h1>Consulter un message</h1><br /><br />';

    //La requête nous permet d'obtenir les infos sur ce message :
    $query = $db->prepare('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');
    $query->bindValue(':id',$id_mess,PDO::PARAM_INT);
    $query->execute();
    $data=$query->fetch();

    // Attention ! Seul le receveur du mp peut le lire !
    if ($id != $data['mp_receveur']) erreur(ERR_WRONG_USER);
       
    //bouton de réponse
    echo'<p><a href="./messagesprives.php?action=repondre&amp;dest='.$data['mp_expediteur'].'">
    <img src="./images/40790.gif" alt="Répondre" 
    title="Répondre à ce message" /></a></p>'; 

    ?>
<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'].'&amp;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>';
    if ($data['mp_lu'] == 0) //Si le message n'a jamais été lu
    {
        $query->CloseCursor();
        $query=$db->prepare('UPDATE forum_mp 
        SET mp_lu = :lu
        WHERE mp_id= :id');
        $query->bindValue(':id',$id_mess, PDO::PARAM_INT);
        $query->bindValue(':lu','1', PDO::PARAM_STR);
        $query->execute();
        $query->CloseCursor();
    }
        
break; //La fin !

case "nouveau": //Nouveau mp
       
   echo'<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a> --> Ecrire un message</p>';
   echo '<h1>Nouveau message privé</h1><br /><br />';
   ?>
   <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="important" name="important" value="Important" onClick="javascript:bbcode('[t]', '[/t]');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;?>
<?php
case "repondre": //On veut répondre
   echo'<p><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a> --> Ecrire un message</p>';
   echo '<h1>Répondre à un message privé</h1><br /><br />';

   $dest = (int) $_GET['dest'];
   ?>
   <form method="post" action="postok.php?action=repondremp&amp;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;
?>
<?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
    $query=$db->prepare('SELECT mp_receveur
    FROM forum_mp WHERE mp_id = :id');
    $query->bindValue(':id',$id_mess,PDO::PARAM_INT);
    $query->execute();
    $data = $query->fetch();
    //Sinon la sanction est terrible :p
    if ($id != $data['mp_receveur']) erreur(ERR_WRONG_USER);
    $query->CloseCursor(); 

    //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&amp;id='.$id_mess.'&amp;sur=1">
    Oui</a> - <a href="./messagesprives.php">Non</a></p>';
    }
    //Certain
    else
    {
        $query=$db->prepare('DELETE from forum_mp WHERE mp_id = :id');
        $query->bindValue(':id',$id_mess,PDO::PARAM_INT);
        $query->execute();
        $query->CloseCursor(); 
        echo'<p>Le message a bien été supprimé.<br />
        Cliquez <a href="./messagesprives.php">ici</a> pour revenir à la boite
        de messagerie.</p>';
    }

    break;
?>
<?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><i>Vous êtes ici</i> : <a href="./index.php">Index du forum</a> --> <a href="./messagesprives.php">Messagerie privée</a>';
    echo '<h1>Messagerie Privée</h1><br /><br />';

    $query=$db->prepare('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 = :id ORDER BY mp_id DESC');
    $query->bindValue(':id',$id,PDO::PARAM_INT);
    $query->execute();
    echo'<p><a href="./messagesprives.php?action=nouveau">
    <img src="./images/40789.gif" alt="Nouveau" title="Nouveau message" />
    </a></p>';
    if ($query->rowCount()>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 = $query->fetch())
        {
            echo'<tr>';
            //Mp jamais lu, on affiche l'icone en question
            if($data['mp_lu'] == 0)
            {
            echo'<td><img src="./images/40792.gif" alt="Non lu" /></td>';
            }
            else //sinon une autre icone
            {
            echo'<td><img src="./images/40793.gif" alt="Déja lu" /></td>';
            }
            echo'<td id="mp_titre">
            <a href="./messagesprives.php?action=consulter&amp;id='.$data['mp_id'].'">
            '.stripslashes(htmlspecialchars($data['mp_titre'])).'</a></td>
            <td id="mp_expediteur">
            <a href="./voirprofil.php?action=consulter&amp;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&amp;id='.$data['mp_id'].'&amp;sur=0">supprimer</a></td></tr>';
        } //Fin de la boucle
        $query->CloseCursor();
        echo '</table>';

    } //Fin du if
    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>';
    }
} //Fin du switch
?>
</div><div id="pied_de_page"><?php include("../pied_de_page.php");?></div>
</body>
</html>

Voila et si vous pouvez m'aider pour mon autre problème, celui des accents, si je mets un caractère spécial comme celui-ci : "é" ou celui là : "à", toute la zone de texte n'est pas affichée, c'est à dire que le message ne sera pas affiché.
Ce problème persiste avec tous les messages du forum.
merci de votre aide.......
Hors ligne Re00be # Posté le 31/03/2012 à 10:40:32
Avatar

Avis : Très bon

Ville : Troyes
Pays : France métropolitaine

Citation : okuni
J'avais aussi pensé à rajouter un champ dans la table des topic où l'on rajoute tous les id comme ceci :
Citation
;1;12;456;1325;
et donc de vérifier via un pregexp dans la requete SQL.

Oui, on peut faire comme ça. Par contre faut que le champ soit de type varchar et appliquer un intval() si jamais le mp est à destination d'une seule personne. Sinon avec explode() on peut récupérer tranquillement tous les ids !

Sinon, ce tutoriel est très bien (l'ensemble pas seulement la partie messagerie) et il m'a beaucoup aidé ! :)

Image utilisateur Image utilisateur
 
Hors ligne webmaster débutant # Posté le 25/04/2012 à 19:10:33

Avis : Bon

Très bon tuto mais si je peux me permettre je me demandais si il n'y avait pas une erreur dans ce 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
<?php
case "repondremp": //Si on veut répondre

    //On récupère le titre et le message
    $message = $_POST['message'];
    $titre = $_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

    $query=$db->prepare('INSERT INTO forum_mp
    (mp_expediteur, mp_receveur, mp_titre, mp_text, mp_time, mp_lu)
    VALUES(:id, :dest, :titre, :txt, :tps, \'0\')'); 
    $query->bindValue(':id',$id,PDO::PARAM_INT);   
    $query->bindValue(':dest',$dest,PDO::PARAM_INT);   
    $query->bindValue(':titre',$titre,PDO::PARAM_STR);   
    $query->bindValue(':txt',$message,PDO::PARAM_STR);   
    $query->bindValue(':tps',$temps,PDO::PARAM_INT);   
    $query->execute();
    $query->CloseCursor(); 

    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;
?>


Dans l'insertion de la réponse, la valeur 0 est entourée de deux apostrohes mais celles-ci ne devarient pas être chacunes précédées d'antislash?
Hors ligne webmaster débutant # Posté le 25/04/2012 à 19:24:18

Avis : Bon

j'ai oublié de préciser que c'est moi qui est rajouté les antislash

Voir tous les commentaires