TUTO PHP - Envoyer des messages privés

PrimFX Boris ('PrimFX') Le 6 décembre 2015

Je vous propose de voir comment créer un système très basique de messagerie privée qui sera bien sûr à améliorer à votre guise ! Si vous voulez un tuto plus poussé sur l'envoie de messages privés en PHP n'hésitez pas à me le demander dans les commentaires et je ferai une deuxième vidéo là-dessus ;-)

Code du tuto:

- envoi.php
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
   if(isset($_POST['envoi_message'])) {
      if(isset($_POST['destinataire'],$_POST['message']) AND !empty($_POST['destinataire']) AND !empty($_POST['message'])) {
         $destinataire = htmlspecialchars($_POST['destinataire']);
         $message = htmlspecialchars($_POST['message']);
         $id_destinataire = $bdd->prepare('SELECT id FROM membres WHERE pseudo = ?');
         $id_destinataire->execute(array($destinataire));
         $dest_exist = $id_destinataire->rowCount();
         if($dest_exist == 1) {
            $id_destinataire = $id_destinataire->fetch();
            $id_destinataire = $id_destinataire['id'];
            $ins = $bdd->prepare('INSERT INTO messages(id_expediteur,id_destinataire,message) VALUES (?,?,?)');
            $ins->execute(array($_SESSION['id'],$id_destinataire,$message));
            $error = "Votre message a bien été envoyé !";
         } else {
            $error = "Cet utilisateur n'existe pas...";
         }
      } else {
         $error = "Veuillez compléter tous les champs";
      }
   }
   $destinataires = $bdd->query('SELECT pseudo FROM membres ORDER BY pseudo');
   ?>
   <!DOCTYPE html>
   <html>
   <head>
      <title>Envoi de message</title>
      <meta charset="utf-8" />
   </head>
   <body>
      <form method="POST">
         <label>Destinataire:</label>
         <!-- <select name="destinataire">
            <?php while($d = $destinataires->fetch()) { ?>
            <option><?= $d['pseudo'] ?></option>
            <?php } ?>
         </select> -->
         <input type="text" name="destinataire" />
         <br /><br />
         <textarea placeholder="Votre message" name="message"></textarea>
         <br /><br />
         <input type="submit" value="Envoyer" name="envoi_message" />
         <br /><br />
         <?php if(isset($error)) { echo '<span style="color:red">'.$error.'</span>'; } ?>
      </form>
      <br />
      <a href="reception.php">Boîte de réception</a>
   </body>
   </html>
<?php
}
?>
- reception.php
<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_membre', 'root', '');
if(isset($_SESSION['id']) AND !empty($_SESSION['id'])) {
$msg = $bdd->prepare('SELECT * FROM messages WHERE id_destinataire = ?');
$msg->execute(array($_SESSION['id']));
$msg_nbr = $msg->rowCount();
?>
<!DOCTYPE html>
<html>
<head>
   <title>Boîte de réception</title>
   <meta charset="utf-8" />
</head>
<body>
   <a href="envoi.php">Nouveau message</a><br /><br /><br />
   <h3>Votre boîte de réception:</h3>
   <?php
   if($msg_nbr == 0) { echo "Vous n'avez aucun message..."; }
   while($m = $msg->fetch()) {
      $p_exp = $bdd->prepare('SELECT pseudo FROM membres WHERE id = ?');
      $p_exp->execute(array($m['id_expediteur']));
      $p_exp = $p_exp->fetch();
      $p_exp = $p_exp['pseudo'];
   ?>
   <b><?= $p_exp ?></b> vous a envoyé: <br />
   <?= nl2br($m['message']) ?><br />
   -------------------------------------<br/>
   <?php } ?>
</body>
</html>
<?php } ?>
Quelques idées pour aller plus loin:
- Création d'une page de lecture pour lire chaque message individuellement
- Ajout de l'heure et date d'envoi du message, d'un objet, d'un système de pièces jointes,...
- Possibilité de répondre directement à un message
- Possibilité d'envoyer un message privé à plusieurs personnes en même temps
- Faire une distinction entre les messages lus et non lus (exemple: ajout d'un champ "lu" dans la table "messages", lorsque l'on clique sur un message, la valeur "lu" de ce message passe à "1", et celui-ci est donc considéré comme ayant été lu)
- Je vous laisse proposer d'autres améliorations dans les commentaires 😛

Pour ceux qui ont envie d'approfondir un peu dans les messages privés, j'ai fais cette vidéo sur les messages privés avancés histoire d'ajouter quelques fonctionnalités :-)

A propos de l'auteur

PrimFX
Boris ('PrimFX')

Je m'appelle Boris, j'ai 22 ans et je suis passionné d'informatique. Suite à mes études (Licence Informatique puis MSc Computer Science au Trinity College Dublin), je gère l'entreprise Single Quote co-fondée en 2019 et je profite de mon temps libre pour partager ma passion à travers des vidéos & articles 😃

Votre commentaire

Vous devez être connecté pour poster un commentaire. Se connecter ou Créer un compte

Commentaires 21

  • lb Le 29 juin, à 02:03 | Répondre

    bonjour je voulais savoir comment on fait pour afficher le document qui permet de taper le codes?

  • Lyard Le 17 février, à 06:26 (Édité le 17 février 2021 à 06:26) | Répondre

    Comment afficher le dernier message qu'on vient d'envoyer ?

  • Dabouh Le 23 octobre, à 15:41 | Répondre

    @Naoluc
    Salut
    Tu as une page blanche parce que tu n'es pas connecté en tant que membre de la base de données avec laquelle tu veux envoyer un message.
    Il faut déterminer une id de session ex :
    $_SESSION['id']=1;

    Dabouh

  • Naoluc Le 8 octobre, à 11:53 (Édité le 8 octobre 2020 à 11:54) | Répondre

    C'est très super ce tuto mais ces codes nous affiche une page blanche. Quoi faire pour surmonter ça? Besoin d'aide urgent s'il vous plait !!!!!!!

  • kirkangel Le 13 juillet, à 19:25 | Répondre

    Salut, je m'appelle Kirk-Angel

    J'ai copié ton code de base + les données de base de donnés mais quand j'actualise ma page , j'ai une page blanche .
    Que faire ?
    Je précise que je suis sous MAMP (Mac)

    Merci de votre coup de main


    Kirk-Angel

  • nono70063 Le 9 janvier, à 15:36 | Répondre

    Tres bon tuto méme en debut 2019


  • clovis Le 12 novembre, à 01:12 | Répondre

    Bonjour tout le monde,

    Est-ce que quelqu'un pourrait m'aider? Je cherche à afficher le nombre de nouveaux messages de chaque utilisateur.

    Merci!!!
    Mention spéciale à toi Boris, très bonne vidéo.

  • jajabajap Le 21 juin, à 12:56 | Répondre

    @Martin4952

  • Myster Le 26 décembre, à 12:59 | Répondre

    Merci :)

  • Rivens Le 20 novembre, à 13:55 | Répondre

    pourquoi faut des compt premium pour afficher les code

  • am1991ine Le 7 mai, à 23:28 | Répondre

    Merci Pour le Tuto svp tu peux mettre le fichier complet du projet (base de donnees,page html ...) merci d'avance

  • PrimFX Le 30 décembre, à 21:10 | Répondre

    @Pireu Je fais une simple condition. Si l'utilisateur est connecté - if(isset($_SESSION['id'])) - j'affiche le code, sinon, je le masque et j'affiche un message demandant de se connecter à la place :-)

  • Pireu Le 30 décembre, à 20:57 | Répondre

    @PrimFX comment tu fais pour afficher les codes sources de tes tutoriels que si l'utilisateur est connecté ? (J'ai essayé de comprendre avance poser la question)

  • PrimFX Le 30 décembre, à 17:54 | Répondre

    @Pireu Salut et merci pour ton commentaire ! J'ai déjà fait un petit tuto pour ce qui est des grades par ici https://goo.gl/Lumo7n et pour ce qui est du système de messagerie privée avancé c'est ici https://goo.gl/6G8olY ;-)

  • Pireu Le 28 décembre, à 09:25 | Répondre

    Et oui un tutoriel approfondit serait vraiment super ! :D

  • Pireu Le 27 décembre, à 23:59 | Répondre

    Vraiment super comme tuto ! Tu pourrais faire un tutoriel pour realiser un systeme de grade sur l'espace membre (par exemple un administrateur qui peut suprimmer, modifier les profils des autres utilisateurs et leurs envoyer des messages a tous en meme temps...). Sinon un tutoriel sur comment créer une description (une bio) quand on cree son compte sur l'esp membre. Merci :D

  • Clouder Le 9 décembre, à 23:21 | Répondre

    Pratiquement :p

    Tu te rappel de ton système de tchat a plusieurs que tu avais repris pour automatiser les conversations ? :p

    Du genre tu envoies ton message et l'autre l'obtient directement s'il est encore sur la page ! :)

    Et bien pour faire une messagerie super cool et pas casse tête tu crée ta messagerie comme tu as fait et tu recharge juste la partie que tu as besoin donc nous ici sa serait juste les messages des utilisateurs :p

    Et tu penses qu'il y aurait moyen que tu fasses un Tuto pour créer son propre BBCode ? :)

  • PrimFX Le 8 décembre, à 20:31 | Répondre

    @Clouder Tu veux dire comment une sorte de conversation continue ? (genre comme l'échange de mail entre deux personnes avec Gmail ?) :p

  • Clouder Le 8 décembre, à 10:40 | Répondre

    Tu peux rendre automatique les messages entre deux utilisateurs :p

  • Martin4952 Le 7 décembre, à 03:31 | Répondre

    Vraiment génial ce tutoriel, un nouveau tutoriel plus avancé sur ce système je serais ravis !

  • onesyst Le 6 décembre, à 19:13 | Répondre

    C'est cool PrimFx. Merci