Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Site Web > PHP > Systèmes complets > Système de messagerie privée (MP) > Lecture du tutoriel

Système de messagerie privée (MP)

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)
Avatar
Auteur : Nicol@s
Note : 16 / 20 (37 votes)
Visualisations : 24 640

Plus d'informations Plus d'informations
Salut à tous !

Quand j'ai commencé à avoir de bonnes bases en PHP, j'ai voulu faire un système de MP, mais pas moyen de trouver un tuto dessus. Je vous ai donc écrit ce tutoriel, parce qu'il y en a beaucoup qui chaque jour, postent des messages sur le forum "Comment faire un système de messagerie interne", "MP"...

Lisez bien ce tutoriel et vous saurez enfin faire un système de MP ! :)
Sommaire du tutoriel :
Icône du chapitre

Prérequis

Pour faire un système de messagerie, il faut :

Pour créer un système de MP il va vous falloir de la patience, parce que c'est un gros gros code :lol: , on peut le faire de deux façons :

Personnellement je l'utilise en une seule page parce que 347 lignes c'est pas si énorme que ça, comparé à d'autres pages :) . Mais si vous préférez séparer en plusieurs page ce sera facilement faisable.

Mon tuto est fait pour un espace membre (on s'en doutait pas du tout :-° ), il utilise donc des sessions pour l'expéditeur, pour voir si le membre est connecté et c'est tout je crois ^^ .

Si vous voulez voir quel résultat donne ce tutoriel allez voir ici, je sais c'est moche mais c'est pas ce qui compte :p , vous vous connectez avec comme identifiant soit "test" comme pseudo et "test" comme mot de passe, soit avec "test2" comme pseudo et "test" comme mot de passe.
Ensuite, vous attendez d'être redirigé et vous cliquez sur messagerie. Vous pouvez tout tester. Ensuite vous pouvez changer d'utilisateur pour savoir si les messages s'envoient correctement.

Alors allons-y :pirate: !

Le code de la messagerie interne

Table SQL


J'espère que vous savez ce qu'est une table SQL, quand même :lol: . Sinon, retournez lire les cours de M@teo21 sur MySQL ;) .

Voici la table que nous utilisons pour le système de MP :

Code : SQL
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE TABLE `mp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sujet` varchar(255) NOT NULL DEFAULT '',
  `expediteur` varchar(255) NOT NULL DEFAULT '',
  `destinataire` varchar(255) NOT NULL DEFAULT '',
  `message` text NOT NULL,
  `timestamp` bigint(20) NOT NULL DEFAULT '0',
  `vu` enum('0','1') NOT NULL DEFAULT '0',
  `efface` enum('0','1','2') NOT NULL DEFAULT '0',
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;


Explications




mp.php


On va attaquer le principal : la page mp.php.

Tu dis que le principal c'est la page mp.php, mais il n'y a pas d'autres pages, si ? o_O

Si, j'utilise une autre page qui s'appelle fonction.php, dans laquelle il y a la connexion à la base de données. D'ailleurs, on va commencer par cette page. ^^

Finalement, c'est includes/fonction.php



Donc cette fois-ci, on est partis ! :pirate:

Pour ceux qui s'attendaient à un tutoriel où on donne le code en entier en bas de page, vous vous trompez d'adresse. Je donne les codes par morceau avec des explications. Il faut quand même réfléchir un minimum. :colere: :)

Je ne mettrai les balises d'ouverture et de fermeture de PHP (<?php et ?>) que dans le premier et le dernier code ; cependant, il y en aura dans d'autres codes pour pouvoir mettre un peu d'HTML.
Autre chose : dans votre script de connexion, il faudrait que lorsque que vous initialisiez les variables de sessions, vous ajoutiez les variables suivantes qui sont utilisées dans le code : $_SESSION['pseudo'] contient le pseudo du membre, $_SESSION['logged'] prend la valeur true quand l'utilisateur est connecté et la valeur false quand l'utilisateur est déconnecté.


Pour la page fonction.php, je mets le code en entier ^^ .

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
<?php
// on crée la fonction connexion() qui réalise la connexion à la BDD
function connexion()
{
// on se connecte à MySQL
   mysql_connect('votre_hote', 'votre_identifiant', 'votre_mot_de_passe');
// n sélectionne la base de données
   mysql_select_db("votre_base_de_donnees");
}
// fonction redirection qui redirige vers la page donnée en paramètre, faite en Javascript
function redirection($url){
    echo "<script type=\"text/javascript\">\n"
    . "<!--\n"
    . "\n"
    . "function redirect() {\n"
    . "window.location='" . html_entity_decode($url) . "'\n"
    . "}\n"
    . "setTimeout('redirect()','2000');\n"
    . "\n"
    . "// -->\n"
    . "</script>\n";
     }

?>


Et voilà, pas bien dur : je ne vais pas trop détailler, j'ai mis des commentaires exprès pour vous :p .

La page mp.php



Cette fois-ci, c'est la bonne :diable: !

On va commencer par un petit bout de code :

Code : PHP
1
2
3
4
5
6
7
<?php
// on commence par ouvrir la session
session_start();
// on inclut le fichier includes/fonction.php
  require('includes/fonction.php');
// on utilise la fonction connexion définit dans includes/fonction.php
  connexion();

Pas d'explication là-dessus.... Ah si, il faut toujours ouvrir la session en début de code, comme ici.
Ensuite, on va commencer par la première condition : est-ce que l'utilisateur est un membre connecté et quelle action veut-il faire ?

Afficher la boîte de réception


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
// Si la session est démarrée et si les variables $_GET['mp'] et$_GET['action'] n'existent pas, alors on affiche la page
      if($_SESSION['logged'] == true AND !isset($_GET['mp']) AND !isset($_GET['action']))
      {
// on compte le nombre de messages non lus et dont le destinataire est le membre actuellement connecté
        $nbr_non_vus = mysql_query("SELECT COUNT(*) AS nbre FROM mp WHERE destinataire='".$_SESSION['pseudo']."' AND vu='0' AND (efface='0' OR efface='2')")or die(mysql_error());
// on en fait un array
        $nbre_non_vus = mysql_fetch_assoc($nbr_non_vus);
// on récupère les données sur les messages adressés au membre connecté.
        $retour = mysql_query("SELECT id, sujet, expediteur, timestamp, vu FROM mp WHERE destinataire='".$_SESSION['pseudo']."' AND (efface='0' OR efface='2') ORDER BY id DESC");
        ?>
          <table class="table">
            <caption class="caption">Boîte de réception</caption>
            <thead>
              <th class="th"><em>Lu</em>/<strong>Non lu (<?php echo $nbre_non_vus['nbre'];?>)</strong></th>
              <th class="th">Sujet</th>
              <th class="th">Auteur</th>
              <th class="th">Date</th>
            </thead>
            <tfoot>
              <th class="th"><em>Lu</em>/<strong>Non lu(<?php echo $nbre_non_vus['nbre'];?>)</strong></th>
              <th class="th">Sujet</th>
              <th class="th">Auteur</th>
              <th class="th">Date</th>
            </tfoot>
            <tbody>
        <?php
// on crée une boucle
        while($donnees = mysql_fetch_assoc($retour))
        {
// on enlève les slashs inutiles qui se seraient ajoutés
          $sujet = stripslashes($donnees['sujet']);
          $expediteur = stripslashes($donnees['expediteur']);
          $date = $donnees['timestamp'];
// si le message n'est pas lu, on le montre et on marque son sujet en gras 
          if($donnees['vu'] == 0)
          {
// on crée une ligne sur le tableau
            echo'<tr><td class="td"><strong>Non lu</strong></td><td class="td"><strong><a href="mp.php?mp='.$donnees['id'].'&amp;action=lire">'.$sujet.'</a></strong></td><td class="td">'.$expediteur.'</td><td class="td">Le' .date('d/m/Y \à H\hi', $date).'</td><td class="td"><a href="mp.php?action=supprimer&amp;suppr=1&amp;id='.$donnees['id'].'">Supprimer ce message</a></td></tr>';
          }
// sinon, on marque que le sujet a été lu, et on met en italique
          else
          {
// on crée une nouvelle ligne sur le tableau
            echo '<tr><td class="td"><em>Lu</em></td><td class="td"><em><a href="mp.php?mp='.$donnees['id'].'&amp;action=lire">'.$sujet.'</a></em></td><td class="td">'.$expediteur.'</td><td class="td">Le' .date('d/m/Y \ê H\hi', $date).'</td><td class="td"><a href="mp.php?action=supprimer&amp;suppr=1&amp;id='.$donnees['id'].'">Supprimer ce message</a></td></tr>';
          }
        }
        ?>
           
            </tbody>
          </table>
          <p><a href="mp.php?action=LireMpRecu">Voir les messages envoyés</a>
            <a href="mp.php?action=ecrire">Ecrire un nouveau message</a></p>
        <?php
// on ferme la condition
      }

C'est la première condition : elle affiche la page de la boîte de réception si les variables $_GET['mp'] et $_GET['action'] n'existent pas. La variable $_GET['action'] est la variable qui définit l'action à exécuter parce que ce code n'est que sur une seule page. Si vous travaillez sur plusieurs pages, cette variable ne vous sert à rien.

On va attaquer la suite de la condition qui est l'action de lire un message (faut bien pouvoir :-° ).

Code pour lire un message


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
39
40
41
// sinon si la variable $_GET['mp'] existe, si l'utilisateur est connecté, si la variable $_GET['action'] existe et contient 'lire' alors...
      elseif(isset($_GET['mp']) AND isset($_GET['action']) AND $_GET['action'] == 'lire' AND $_SESSION['logged'] == true)
      {
        $id_mp = $_GET['mp'];
// on récupère les données où l'id est égale à l'id envoyée par l'URL
        $retour = mysql_query("SELECT destinataire, sujet, expediteur, timestamp, message FROM mp WHERE id='".$id_mp."'")or die(mysql_error());
        $donnees = mysql_fetch_assoc($retour);
// vérification pour qu'une autre personne que le destinataire ne puisse voir le message
        if($donnees['destinataire'] == $_SESSION['pseudo'])
        {
          ?>
            <table class="table">
              <thead>
              </thead>
              <tfoot>
              </tfoot>
              <tbody>
          <?php
// on enlève les slashs inutiles
          $sujet = stripslashes($donnees['sujet']);
          $expediteur = stripslashes($donnees['expediteur']); 
// on met la date au format Jour/mois/année à heure h minutes
          $date = date('d/m/Y \à H\hi', $donnees['timestamp']);
          $mp = stripslashes($donnees['message']);   
// on affiche le MP       
          echo '<tr><td class="td"><h1>'.$sujet.'</h1></td></tr><tr><td class="td">Le '.$date.'</td></tr><tr><td class="td">De : '.$expediteur.'</td></tr><tr><td class="td">Message :<br /><br/>'.$mp.'</td></tr><tr><td class="td"><a href="mp.php?action=ecrire&reponse='.$id_mp.'">Répondre</a>   <a href="mp.php?action=ecrire">Nouveau</a>    <a href="mp.php">Revenir au menu de la messagerie</a></td></tr>';
// on met que le message a été lu.
          mysql_query("UPDATE mp SET vu='1' WHERE id='".$id_mp."'")or die(mysql_error());
          ?>
              </tbody>
            </table>
          <?php
        }
        else
        {
// on affiche un message d'erreur si on essaye de lire un message qui n'est pas adressé à soi-même.
          echo 'Ceci est un message privé qui ne s\'adresse pas à vous mais à '.$donnees['destinataire'].'';
// on ferme la condition "secondaire"
        }
// on ferme la condition "primaire"
      }

Dans ce bout de code, on affiche le message indiqué dans la boîte de réception. Une fois que le message a été lu, on modifie la valeur de vu dans la table, on la remplace par 1. Toutefois, pour que n'importe qui ne puisse pas lire les messages des autres, il y a une petite protection :p : on ne peut lire le message que si le pseudo du destinataire du MP est le même que le pseudo de session du membre.

La suite de la condition, l'action d'envoyer un message, est très pratique aussi. :lol:

Formulaire d'envoi de messages



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
// Sinon si l'URL indique qu'on veut envoyer un nouveau message ('ecrire'), on affiche un formulaire d'envoi.
      elseif(isset($_GET['action']) AND $_GET['action'] == 'ecrire' AND $_SESSION['logged'] == true)
      {
// si la variable $_GET['reponse'] n'existe pas, alors c'est un nouveau message
        if(!isset($_GET['reponse']))
        {
          ?>
            <form action="mp.php?action=traitement" method="post">
              <label>Sujet :<input type="text" name="sujet" /></label>
              <label>Destinataire :<input type="text" name="destinataire" /></label>
              <label>Message :<textarea name="message" rows="10" cols="40"></textarea></label>
              <input type="submit" value="Envoyer le message" />
            </form>
          <?php
        }
// sinon, c'est une réponse
        else
        {
// on récupère les données du mp dont l'id est égale à celui auquel on veut répondre
          $retour_reponse = mysql_query("SELECT sujet, expediteur FROM mp WHERE id='".$_GET['reponse']."'");
          $donnees_reponse = mysql_fetch_assoc($retour_reponse);
          ?>
            <form action="mp.php?action=traitement" method="post">
<!-- on met RE : devant le sujet auquel on répond -->
              <label>Sujet :<input type="text" name="sujet" value="RE : <?php echo $donnees_reponse['sujet'];?>"/></label>
              <label>Destinataire :<input type="text" name="destinataire" value="<?php echo $donnees_reponse['expediteur']; ?>"/></label>
              <label>Message :<textarea name="message" rows="10" cols="40"></textarea></label>
              <input type="submit" value="Envoyer le message" />
            </form>
          <?php
        }
      }

Là, c'est un simple formulaire, à part que si l'on indique que c'est une réponse, on met RE : devant le sujet d'origine (pour indiquer que c'est une réponse). À part ça, aucun problème :) ?

Traitement du formulaire d'envoi de message



On va voir le code qui traite les données envoyées par le formulaire ci-dessus et les enregistre dans la BDD.

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
// sinon si la variable $_GET['action'] est égale à 'traitement', alors on traite les données envoyées par le fomulaire
      elseif(isset($_GET['action']) AND $_GET['action'] == 'traitement' AND $_SESSION['logged'] == true)
      {
// si les champs "message", "sujet" et "destinataire" ne sont pas vides       
        if(!empty($_POST['sujet']) AND !empty($_POST['destinataire']) AND !empty($_POST['message']))
        {
// on regarde s'il existe une entrée avec le pseudo du destinataire
          $nbr_entree = mysql_query("SELECT COUNT(*) AS nbre_entrees FROM membres WHERE pseudo='".$_POST['destinataire']."'")or die(mysql_error());
          $nbr_entrees = mysql_fetch_assoc($nbr_entree);
// s'il existe
          if($nbr_entrees['nbre_entrees'] == 1)
          {
// on sécurise les valeurs envoyées
            $sujet = addslashes(htmlentities($_POST['sujet']));
            $destinataire = addslashes(htmlentities($_POST['destinataire']));
            $message = addslashes(nl2br(htmlentities($_POST['message'])));
            $expediteur = $_SESSION['pseudo'];
            $timestamp = time();
// on récupère le dernier message envoyé au destinataire
            $retour = mysql_query("SELECT destinataire, sujet, message FROM mp WHERE expediteur='$expediteur' ORDER BY id DESC LIMIT 0,1");
            $donnees = mysql_fetch_assoc($retour);
// si c'est le même que celui qu'on veut envoyer
            if($donnees['destinataire'] == $destinataire AND $donnees['sujet'] == $sujet AND $donnees['message'] == $message)
            {
// on ne l'enregistre pas, et on affiche un message d'erreur
              echo 'Vous ne pouvez pas poster le même message 2 fois d\'affilée';
            }
// sinon ce n'est pas un double post
            else
            {
// alors on enregistre dans la base de données
              mysql_query("INSERT INTO mp(sujet, expediteur, destinataire, message, timestamp, vu, efface) VALUES('" . $sujet . "', '" . $expediteur . "', '" . $destinataire . "', '" . $message . "', '" . $timestamp . "', '0', '0')")or die(mysql_error());
// on met un message
              echo 'Votre message a bien été envoyé à '.$destinataire.'. Vous allez être redirigé vers votre boîte de réception dans une seconde.';
// et on redirige vers la boîte de réception
              redirection('mp.php');
            }
          }
// sinon le membre n'est pas enregistré dans la table
          else
          {
// alors on affiche un message d'erreur
            echo 'Le membre à qui vous souhaitez envoyer ce message n\'existe pas/plus. Vous allez être redirigé vers votre boîte de réception dans 2 secondes';
// et on redirige vers la boîte de réception
            redirection('mp.php');

          }
        }
// sinon tous les champs ne sont pas remplis
        else
        {
// alors on affiche un message d'erreur et un lien
          echo 'Vous devez remplir tout les champs. <a href="mp.php?action=ecrire">Recommencer</a>.';
        }
      }

Là, il y a plusieurs conditions :

Si ces trois conditions sont vérifiées, alors on enregistre le message dans la base de données. Sinon, on affiche des messages d'erreur.

Boîte d'envoi



Ici, on va mettre un code qui permet de voir les messages qu'on a envoyés.

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
// sinon si la variable $_Get['action'] est égale à 'LireMpRecu', on affiche la boîte d'envoi
      elseif($_GET['action'] == 'LireMpRecu' AND $_SESSION['logged'] == true AND !isset($_GET['mp']))
      {
// on récupère les messages qu'on a envoyés et que l'on n'a pas supprimés
        $retour = mysql_query("SELECT id, destinataire, sujet, timestamp FROM mp WHERE expediteur='".$_SESSION['pseudo']."' AND (efface='0' OR efface='1') ORDER BY id DESC")or die(mysql_error());
        ?>
          <table class="table">
            <caption class="caption">Messages envoyés</caption>
            <thead>
              <th class="th">Sujet</th>
              <th class="th">Destinataire</th>
              <th class="th">Date</th>
            </thead>
            <tfoot>
              <th class="th">Sujet</th>
              <th class="th">Destinataire</th>
              <th class="th">Date</th>
            </tfoot>
            <tbody>
        <?php
// on crée une boucle avec les entrées de la table
        while($donnees = mysql_fetch_assoc($retour))
        {
// on enlève les éventuels slashs superflus
          $sujet = stripslashes($donnees['sujet']);
          $destinataire = stripslashes($donnees['destinataire']);   
          $date = $donnees['timestamp'];
// on ajoute une ligne au tableau pour chaque message
          echo'<tr><td class="td"><a href="mp.php?mp='.$donnees['id'].'&amp;action=lire">'.$sujet.'</a></td><td class="td">'.$destinataire.'</td><td class="td">Le' .date('d/m/Y \à H\hi', $date).'</td><td class="td"><a href="mp.php?action=supprimer&amp;suppr=2&amp;id='.$donnees['id'].'">Supprimer ce message</a></td></tr>';
// on ferme la boucle
        }
        ?>
           
            </tbody>
          </table>
          <p><a href="mp.php">Boîte de réception</a>
          <a href="mp.php?action=ecrire">Ecrire un nouveau message</a></p>
        <?php
// on ferme la condition
      }


Dans ce morceau de code, on affiche les messages que l'on a envoyés et qu'on n'a pas supprimés de la boîte d'envoi. On ajoute une ligne au tableau pour chaque message avec un lien pour lire le message. Il est assez simple à comprendre.

Suppression de message


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
// si la variable $_GET['id'] qui contient l'id du message existe, si la variable $_GET['suppr'] qui indique qui a supprimé le message (destinataire ou expéditeur) existe et si le variable $_GET['action'] est égale à 'supprimer' qui indique la suppression d'un message, alors on le supprime.
      elseif(isset($_GET['action']) AND isset($_GET['suppr']) AND isset($_GET['id']) AND $_GET['action'] == 'supprimer')
      {
        $id = $_GET['id'];
// si c'est l'expéditeur qui supprime le message
        if($_GET['suppr'] == 2)
        {
// alors on récupère les données où l'id du message à supprimer est égale à l'id d'un message         
            $retour = mysql_query("SELECT expediteur, efface FROM mp WHERE id='".$id."'")or die(mysql_error());
// on les met dans un array
            $donnees = mysql_fetch_assoc($retour);
// si l'expéditeur est bien le membre qui veut supprimer le message
            if($_SESSION['pseudo'] == $donnees['expediteur'])
            {
// et si le message a déjà été supprimé par le destinataire
              if($donnees['efface'] == 1)
              {
// on supprime l'entrée correspondante de la table
                mysql_query("DELETE FROM mp WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
                echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
// et on redirige
                redirection('mp.php');

              }
// sinon si le message n'a pas été supprimé par le destinataire
              elseif($donnees['efface'] == 0)
              {
// alors on modifie le champ efface par 2 pour que le destinataire puisse encore voir le message
                mysql_query("UPDATE mp SET efface='2' WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
                echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
// et on redirige
                redirection('mp.php');

              }
// sinon
              else
              {
// on affiche un message d'erreur
              echo 'Une erreur est survenue lors de votre demande. Veuillez recommencer ultèrieurement.';
              } 
             }
// sinon, le membre qui veut supprimer le message n'est pas l'expéditeur
             else
             {
// donc on affiche un message d'erreur
              echo 'Vous ne pouvez pas supprimer un message que vous n\'avez pas envoyé vous-même.';
             }       
        }
// sinon si c'est le destinataire qui veut supprimer un message
        elseif($_GET['suppr'] == 1)
        {
// on récupère les données sur le message que l'on veut supprimer
            $retour = mysql_query("SELECT destinataire, efface FROM mp WHERE id='".$id."'")or die(mysql_error());
// on les met dans un array
            $donnees = mysql_fetch_assoc($retour);
// si le destinataire du message est bien le membre qui veut supprimer le message
            if($_SESSION['pseudo'] == $donnees['destinataire'])
            {
// et si le message a été supprimé par l'expéditeur
              if($donnees['efface'] == 2)
              {
// alors on supprime l'entrée correspondante de la table
                mysql_query("DELETE FROM mp WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
                echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
// et on redirige
                redirection('mp.php');

              }
// sinon si le message n'a pas été supprimé par l'expéditeur
              elseif($donnees['efface'] == 0)
              {
// alors on modifie la valeur de efface par 1 pour que l'expéditeur puisse encore voir le message
                mysql_query("UPDATE mp SET efface='1' WHERE id='".$id."'")or die(mysql_error());
// on affiche un message
                echo 'Le message a été supprimé avec succès. Vous allez être redirigé vers votre boîte de réception dans 2 secondes.';
//et on redirige
                redirection('mp.php');

              }
// sinon
              else
              {
// on affiche un message d'erreur
              echo 'Une erreur est survenue lors de votre demande. Veuillez recommencer ultèrieurement.';
              } 
             }
// sinon le membre qui veut supprimer le message n'est pas le destinataire de celui-ci
             else
             {
// donc on affiche un message d'erreur
              echo 'Vous ne pouvez pas supprimer un message qui ne vous a pas été envoyé.';
             }   
        }


Dans ce code, on a trois variables $_GET[''] :

D'abord, on regarde si c'est l'expéditeur ou le destinataire qui veut supprimer le message ; ensuite, on vérifie si le message à supprimer a bien été reçu / envoyé par le membre qui demande sa suppression ; après, si le champ efface de la table mp n'est pas a zéro mais à 1 (si c'est l'expéditeur qui supprime le message) ou à 2 (si c'est le destinataire qui supprime le message), ça veut dire que le destinataire / expéditeur a déjà supprimé le message de son côté, on supprime donc l'entrée correspondante au message ; sinon, s'il est à zéro, on modifie par 2 ou 1 (2 = supprimé par l'expéditeur, 1 = supprimé par le destinataire). Enfin, on affiche des messages d'erreur si les conditions ne sont pas remplies.

Fin du code



Ouais, on y arrive : c'est le dernier petit bout de code :D .

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// sinon l'action demandée n'existe pas($_GET['action'])
        else
        {
// alors on affiche un message d'erreur
          echo 'Une erreur est survenue lors de votre demande. Veuillez recommencer ultérieurement.';
        }
      }
// sinon on met un message d'erreur qui envoie un lien pour se connecter.
      else
      {
      echo 'Vous n\'êtes pas connecté ou une erreur est survenue lors de votre demande ; veuillez recommencer ultérieurement.<a href="connexion.php">Se connecter</a>';
      }
mysql_close();
    ?>


Là, on ferme tout simplement la condition qui cherche l'action demandée à travers $_GET['action'] ; si elle n'existe pas, on met un message d'erreur. Ensuite, on ferme la condition qui vérifie si le membre est connecté : s'il ne l'est pas, alors on met un message d'erreur, on n'oublie surtout pas de fermer la connexion à mysql et on ferme PHP.

Et j'ai envie de dire que le code est terminé !

Améliorations possibles

Je vais juste lister des améliorations qui me traversent l'esprit. Si vous en trouvez d'autres qui sont possibles, mettez les dans les commentaires et j'éditerais le tuto :


Et le tutorial est maintenant entièrement fini. Si vous avez lu jusque là et que vous avez tout compris bravo :) .

Il n'y a pas de QCM parce que tous les codes qui sont utilisés dans ce tutorial sont expliqués dans les cours de M@teo21. Cependant, si jamais vous ne trouvez pas comment fonctionne une fonction, n'oubliez pas que la documentation PHP est là pour vous ;) .

J'espère que ce tutoriel, qui est le premier que je fais sur un script, aidera votre site.

Merci à vous. ;)
Retour en haut Retour en haut


Créé : le 06/10/2006 à 18:47:14
Modifié : le 31/08/2008 à 23:42:12
Avancement : 100%
Licence : Copie non autorisée

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 235 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.037s (0.0269s)