Page 1 sur 1

petit souci de messagerie (session)

Posté : 01 mars 2009, 13:55
par graffx
Salut les gens,

j' ai un petit souci avec le systeme de mp du sdz, j' ai constamment cette erreur:

"Vous n'êtes pas connecté ou une erreur est survenue lors de votre demande ; veuillez recommencer ultérieurement.Se connecter"

Je ne comprend pas vraiment ou peux se trouver le probleme. Ca serait sympa si vous pouviez jeter un oeil.

Je me connecte en premier sur notre petit site:
http://mickael.piot1.free.fr/index.php?page=accueil

Pas de souci, je suis bien connecté.

PAr contre lorsque je vais dans la messagerie:
http://mickael.piot1.free.fr/mp.php


Voici le lien du tuto du sdz:
http://www.siteduzero.com/tutoriel-3-38 ... ee-mp.html


et enfin ma page mp.php:
<?php
// on commence par ouvrir la session
session_start();
// on inclut le fichier includes/fonction.php
  require('fonction.php');
// on utilise la fonction connexion définit dans includes/fonction.php
  connexion();







// 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['pseudo'] == 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'].'&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&suppr=1&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'].'&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&suppr=1&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
      }










// 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"
      }







// 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
        }
      }


// 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>.';
        }
      }



















// 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'].'&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&suppr=2&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
      }


















// 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é.';
             }   
        }























// 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();
    ?>