messagerie php: Comment faire une messagerie interne en PHP | Exam-Lib
  1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
Dismiss Notice
Welcome to our Education website, plz like our page facebook to support us. Thank You and wish you good navigation

messagerie php: Comment faire une messagerie interne en PHP

abdelouafiApr 14, 2018

    1. abdelouafi

      abdelouafi Administrator Staff Member

      Messages:
      636
      Likes Received:
      14
      Trophy Points:
      18
      Joined
      Sep 13, 2016
      Voici un exemple qui explique coment réaliser une messagerie interne en php. Soient deux pages index.php et inscription.php. Pour bien reconnaître le membre connecté, on va utiliser son ID (ID est un champ dans la table membre).

      Le code source de la page index.php est le suivant :

      Code:
      <?php
      if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
          if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
      
          $base = mysql_connect ('serveur', 'login', 'password');
          mysql_select_db ('nom_base', $base);
      
          $sql = 'SELECT id FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
          $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
          $nb = mysql_num_rows($req);
      
          if ($nb == 1) {
              $data = mysql_fetch_array($req);
      
              session_start();
              $_SESSION['login'] = $_POST['login'];
              // on enregistre en plus l'id du membre dans une variable de session
              $_SESSION['id'] = $data['id'];
      
              mysql_free_result($req);
              mysql_close();
      
              header('Location: membre.php');
              exit();
          }
          elseif ($nb == 0) {
              $erreur = 'Compte non reconnu.';
          }
          else {
              $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
          }
          mysql_free_result($req);
          mysql_close();
          }
          else {
          $erreur = 'Au moins un des champs est vide.';
          }
      }
      ?>
      <html>
      <head>
      <title>Accueil</title>
      </head>
      
      <body>
      Connexion à l'espace membre :<br />
      <form action="index.php" method="post">
      Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo stripslashes(htmlentities(trim($_POST['login']))); ?>"><br />
      Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo stripslashes(htmlentities(trim($_POST['pass']))); ?>"><br />
      <input type="submit" name="connexion" value="Connexion">
      </form>
      <a href="inscription.php">Vous inscrire</a>
      <?php
      if (isset($erreur)) echo '<br /><br />',$erreur;
      ?>
      </body>
      </html>

      Si le visiteur s'inscrit proprement, il est directement reconnu comme membre et il est directement redirigé vers l'espace membre.
      Le code source de la page inscription.php :
      Code:
      <?php
      if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
          if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) && (isset($_POST['pass_confirm']) && !empty($_POST['pass_confirm']))) {
          if ($_POST['pass'] != $_POST['pass_confirm']) {
              $erreur = 'Les 2 mots de passe sont différents.';
          }
          else {
              $base = mysql_connect ('serveur', 'login', 'password');
              mysql_select_db ('nom_base', $base);
      
              $sql = 'SELECT id FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'"';
              $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
              $nb = mysql_num_rows($req);
      
              if ($nb == 0) {
              $sql = 'INSERT INTO membre VALUES("", "'.mysql_escape_string($_POST['login']).'", "'.md5(mysql_escape_string($_POST['pass'])).'")';
              mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
      
              // on récupère l'id de notre nouveau membre
              $id = mysql_insert_id();
      
              session_start();
              $_SESSION['login'] = $_POST['login'];
      
              // on stocke cet id dans une variable de session
              $_SESSION['id'] = $id;
              header('Location: membre.php');
              exit();
              }
              else {
              $erreur = 'Un membre possède déjà ce login.';
              }
          }
          }
          else {
          $erreur = 'Au moins un des champs est vide.';
          }
      }
      ?>
      <html>
      <head>
      <title>Inscription</title>
      </head>
      
      <body>
      Inscription à l'espace membre :<br />
      <form action="inscription.php" method="post">
      Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo stripslashes(htmlentities(trim($_POST['login']))); ?>"><br />
      Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo stripslashes(htmlentities(trim($_POST['pass']))); ?>"><br />
      Confirmation du mot de passe : <input type="password" name="pass_confirm" value="<?php if (isset($_POST['pass_confirm'])) echo stripslashes(htmlentities(trim($_POST['pass_confirm']))); ?>"><br />
      <input type="submit" name="inscription" value="Inscription">
      </form>
      <?php
      if (isset($erreur)) echo '<br />',$erreur;
      ?>
      </body>
      </html>
      Réalisation de notre messagerie interne:

      Qu'est ce qu'un message ?

      Tout simplement un message est sous forme de :
      • deux utilisateurs A et B (A étant l'émetteur du message et B étant le destinataire).
      • un titre
      • une date d'émission
      • le message
      On va créer une nouvelle page pour stocker les messages, voici le code sql :
      Code:
      CREATE TABLE messages (
          id int(11) NOT NULL auto_increment,
          id_expediteur int(11) NOT NULL default '0',
          id_destinataire int(11) NOT NULL default '0',
          date datetime NOT NULL default '0000-00-00 00:00:00',
          titre text NOT NULL,
          message text NOT NULL,
          PRIMARY KEY  (id)
      ) TYPE=MyISAM;
      On va commenter cette requête, nous avons :
      • un attribut id pour identifier chaque message
      • un attribut id_expediteur qui correspondra à l'id d'une des entrées de la table membre (jointure)
      • un attribut id_destinataire qui correspondra à l'id d'une des entrées de la table membre (jointure)
      • une date
      • un titre pour notre message
      • et le message en lui-même
      Voici les pages PHP à créer:
      • La page membre.php pour afficher les messages reçu par le membre.
      • La page lire.php qui permettra de lire les messages
      • La page envoyer.php qui permettra au membre d'envoyer des messages privés aux autres membres du site
      • La page supprimer.php qui permettra de supprimer les messages de sa "boite" interne


      On va modifier la page membre.php de telle sorte d'insérer une requête SQL qui affichera les champs suivants: titre, auteur et date des messages; pour cela on va utiliser l'id du membre. Puisque dans la table "message" on stocke les les auteurs et les destinataires des messages avec l'id des membres et non leur login.

      Le code source de la page membre.php :
      Code:
      <?php
      session_start();
      // on vérifie toujours qu'il s'agit d'un membre qui est connecté
      if (!isset($_SESSION['login'])) {
          // si ce n'est pas le cas, on le redirige vers l'accueil
          header ('Location: index.php');
          exit();
      }
      ?>
      
      <html>
      <head>
      <title>Espace membre</title>
      </head>
      
      <body>
      Bienvenue <?php echo stripslashes(htmlentities(trim($_SESSION['login']))); ?> !<br /><br />
      <?php
      $base = mysql_connect ('serveur', 'login', 'password');
      mysql_select_db ('nom_base', $base);
      
      // on prépare une requete SQL cherchant tous les titres, les dates ainsi que l'auteur des messages pour le membre connecté
      $sql = 'SELECT titre, date, membre.login as expediteur, messages.id as id_message FROM messages, membre WHERE id_destinataire="'.$_SESSION['id'].'" AND id_expediteur=membre.id ORDER BY date DESC';
      // lancement de la requete SQL
      $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
      $nb = mysql_num_rows($req);
      
      if ($nb == 0) {
          echo 'Vous n\'avez aucun message.';
      }
      else {
          // si on a des messages, on affiche la date, un lien vers la page lire.php ainsi que le titre et l'auteur du message
          while ($data = mysql_fetch_array($req)) {
          echo $data['date'] , ' - <a href="lire.php?id_message=' , $data['id_message'] , '">' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' , stripslashes(htmlentities(trim($data['expediteur']))) , ' ]<br />';
          }
      }
      mysql_free_result($req);
      mysql_close();
      ?>
      <br /><a href="envoyer.php">Envoyer un message</a>
      <br /><br /><a href="deconnexion.php">Déconnexion</a>
      </body>
      </html>
      Création de la la page lire.php:

      Pour 'identifier le message qu'on veut lire, nous passons en argument au script lire.php l'id du message. Voici la requête SQL de la forme :
      Code:
      <?php
      $sql = 'SELECT titre, date, message, membre.login as expediteur FROM messages, membre WHERE id_expediteur=membre.id AND messages.id="'.$_GET['id_message'].'"';
      ?>
      Le code source de la page lire.php est:
      Code:
      <?php
      session_start();
      // on vérifie toujours qu'il s'agit d'un membre qui est connecté
      if (!isset($_SESSION['login'])) {
          // si ce n'est pas le cas, on le redirige vers l'accueil
          header ('Location: index.php');
          exit();
      }
      ?>
      
      <html>
      <head>
      <title>Espace membre</title>
      </head>
      
      <body>
      <a href="membre.php">Retour à l'accueil</a><br /><br />
      <?php
      // on teste si notre paramètre existe bien et qu'il n'est pas vide
      if (!isset($_GET['id_message']) || empty($_GET['id_message'])) {
          echo 'Aucun message reconnu.';
      }
      else {
          $base = mysql_connect ('serveur', 'login', 'password');
          mysql_select_db ('nom_base', $base);
      
          // on prépare une requete SQL selectionnant la date, le titre et l'expediteur du message que l'on souhaite lire, tout en prenant soin de vérifier que le message appartient bien au membre connecté
          $sql = 'SELECT titre, date, message, membre.login as expediteur FROM messages, membre WHERE id_destinataire="'.$_SESSION['id'].'" AND id_expediteur=membre.id AND messages.id="'.$_GET['id_message'].'"';
          // on lance cette requete SQL à MySQL
          $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
          $nb = mysql_num_rows($req);
      
          if ($nb == 0) {
          echo 'Aucun message reconnu.';
          }
          else {
          // si le message a été trouvé, on l'affiche
          $data = mysql_fetch_array($req);
          echo $data['date'] , ' - ' , stripslashes(htmlentities(trim($data['titre']))) , '</a> [ Message de ' , stripslashes(htmlentities(trim($data['expediteur']))) , ' ]<br /><br />';
          echo nl2br(stripslashes(htmlentities(trim($data['message']))));
      
          // on affiche également un lien permettant de supprimer ce message de la boite de réception
          echo '<br /><br /><a href="supprimer.php?id_message=' , $_GET['id_message'] , '">Supprimer ce message</a>';
          }
          mysql_free_result($req);
          mysql_close();
      }
      ?>
      <br /><br /><a href="deconnexion.php">Déconnexion</a>
      </body>
      </html>
      

      Création de la la page envoyer.php:
      Dans cette page on va créer un formulaire contenant 3 champs :
      • un menu déroulant avec tous les membres du site
      • une zone de texte pour donner le titre du message
      • une zone de texte pour écrire le message
      Le code source de la page envoyer.php est le suivant:
      Code:
      <?php
      session_start();
      // on vérifie toujours qu'il s'agit d'un membre qui est connecté
      if (!isset($_SESSION['login'])) {
          // si ce n'est pas le cas, on le redirige vers l'accueil
          header ('Location: index.php');
          exit();
      }
      
      // on teste si le formulaire a bien été soumis
      if (isset($_POST['go']) && $_POST['go'] == 'Envoyer') {
          if (empty($_POST['destinataire']) || empty($_POST['titre']) || empty($_POST['message'])) {
          $erreur = 'Au moins un des champs est vide.';
          }
          else {
          $base = mysql_connect ('serveur', 'login', 'password');
          mysql_select_db ('nom_base', $base);
      
          // si tout a été bien rempli, on insère le message dans notre table SQL
          $sql = 'INSERT INTO messages VALUES("", "'.$_SESSION['id'].'", "'.$_POST['destinataire'].'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['titre']).'", "'.mysql_escape_string($_POST['message']).'")';
          mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
      
          mysql_close();
      
          header('Location: membre.php');
          exit();
          }
      }
      ?>
      
      <html>
      <head>
      <title>Espace membre</title>
      </head>
      
      <body>
      <a href="membre.php">Retour à l'accueil</a><br /><br />
      Envoyer un message :<br /><br />
      
      <?php
      $base = mysql_connect ('serveur', 'login', 'password');
      mysql_select_db ('nom_base', $base);
      
      // on prépare une requete SQL selectionnant tous les login des membres du site en prenant soin de ne pas selectionner notre propre login, le tout, servant à alimenter le menu déroulant spécifiant le destinataire du message
      $sql = 'SELECT membre.login as nom_destinataire, membre.id as id_destinataire FROM membre WHERE id <> "'.$_SESSION['id'].'" ORDER BY login ASC';
      // on lance notre requete SQL
      $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
      $nb = mysql_num_rows ($req);
      
      if ($nb == 0) {
          // si aucun membre n'a été trouvé, on affiche tout simplement aucun formulaire
          echo 'Vous êtes le seul membre inscrit.';
      }
      else {
          // si au moins un membre qui n'est pas nous même a été trouvé, on affiche le formulaire d'envoie de message
          ?>
          <form action="envoyer.php" method="post">
          Pour : <select name="destinataire">
          <?php
          // on alimente le menu déroulant avec les login des différents membres du site
          while ($data = mysql_fetch_array($req)) {
          echo '<option value="' , $data['id_destinataire'] , '">' , stripslashes(htmlentities(trim($data['nom_destinataire']))) , '</option>';
          }
          ?>
          </select><br />
          Titre : <input type="text" name="titre" value="<?php if (isset($_POST['titre'])) echo stripslashes(htmlentities(trim($_POST['titre']))); ?>"><br />
          Message : <textarea name="message"><?php if (isset($_POST['message'])) echo stripslashes(htmlentities(trim($_POST['message']))); ?></textarea><br />
          <input type="submit" name="go" value="Envoyer">
          </form>
          <?php
      }
      mysql_free_result($req);
      mysql_close();
      ?>
      </select>
      
      <br /><br /><a href="deconnexion.php">Déconnexion</a>
      <?php
      // si une erreur est survenue lors de la soumission du formulaire, on l'affiche
      if (isset($erreur)) echo '<br /><br />',$erreur;
      ?>
      </body>
      </html>
      Création de la page supprimer.php:
      Dans la page lire.php, on affiche un lien permettant de supprimer le message en cours de lecture, pour cela on doit passer l'id du message qui doit être effacé.

      Le code source de la page supprimer.php est le suivant:

      Code:
      <?php
      session_start();
      // on vérifie toujours qu'il s'agit d'un membre qui est connecté
      
      if (!isset($_SESSION['login'])) {
          // si ce n'est pas le cas, on le redirige vers l'accueil
          header ('Location: index.php');
          exit();
      }
      
      // on teste si l'id du message a bien été fourni en argument au script envoyer.php
      if (!isset($_GET['id_message']) || empty($_GET['id_message'])) {
          header ('Location: membre.php');
          exit();
      }
      else {
          $base = mysql_connect ('serveur', 'login', 'password');
          mysql_select_db ('nom_base', $base);
      
          // on prépare une requête SQL permettant de supprimer le message tout en vérifiant qu'il appartient bien au membre qui essaye de le supprimer
          $sql = 'DELETE FROM messages WHERE id_destinataire="'.$_SESSION['id'].'" AND id="'.$_GET['id_message'].'"';
          // on lance cette requête SQL
          $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
      
          mysql_close();
      
          header ('Location: membre.php');
          exit();
      }
      ?>


      Bon courage!! :) :) ;)

      Tutoriel Vidéo:


       
      Last edited: Apr 14, 2018
      Loading...

Share This Page

Share