Problème espace messagerie php mysql

Résolu
Asteroide -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Voila j'ai un soucis au niveau de l'espace messagerie du membre !
quand je veux afficher tout les messages de l'utilisateurs ca me répète les données.
Voici le script:
<?php

$reponse=mysql_query('select ids,date,expeditaire,destinataire,sujet,pseudo from messages, membre where destinataire = "'.$_SESSION['login'].'"');
while($donnees = mysql_fetch_array($reponse))
  {
    echo "De: ".$donnees['expeditaire']." ; Sujet: ".$donnees['sujet']." ;  Date: ".$donnees['date']." ; 
  }
 
mysql_close();
 
 ?>


par exemple si j'ai 2 message dans ma boite de réception il va m'afficher:
De: jean Sujet: Titre1 Date: 11/11/11
De: paul Sujet: Titre2 Date: 12/12/12
De: jean Sujet: Titre1 Date: 11/11/11
De: paul Sujet: Titre2 Date: 12/12/12
De: jean Sujet: Titre1 Date: 11/11/11
De: paul Sujet: Titre2 Date: 12/12/12
De: jean Sujet: Titre1 Date: 11/11/11
De: paul Sujet: Titre2 Date: 12/12/12
De: jean Sujet: Titre1 Date: 11/11/11
De: paul Sujet: Titre2 Date: 12/12/12

Merci d'avance !

3 réponses

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut! Tout d'abord, sache que l'extension MySQL est obsolète et qu'il faut absolument arrêter de t'en servir et passer à PDO ou mysqli.

    Ensuite, es-tu sûr que ce passage de code ne se fait pas appeler en boucle? Et es-tu aussi sûr que la table messages ne contient bien que 2 enregistrements?
    0
    1. Asteroide
       
      Merci de ta réponse bon alors:


      <?php
      session_start();
      require_once('../conf.php');
      
      
      if(!isset($_SESSION['login'])) {
      header('Location: ../connexion.php/');
      
        exit;
      }       
      
      //messagerie
      include('../deco.php');
      
      
      
      $reponse=mysqli_query($sters,select ids,date,expeditaire,destinataire,sujet,pseudo from messages, membre where destinataire = "'.$_SESSION['login'].'"');
      $donnees = mysqli_fetch_array($reponse);
       
      echo "De: ".$donnees['expeditaire']." ; Sujet: ".$donnees['sujet']." ;  Date: ".$donnees['date']." ; 
        
       
      
       
       ?>


      J'ai enlever le wile mais maintenant j'ai ça comme erreur;

      Warning: mysqli_query(): Couldn't fetch mysqli in /public_html/.../.../index.php on line 646

      Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given

      Merci
      0
  2. Utilisateur anonyme
     
    Bonjour

    En dehors du problème d'utilisation de mysql, si tu as plus de messages que ce que tu attends, c'est parce que dans ta requête tu as deux tables
    ... : from messages, membre...

    Mais tu n'as aucune condition sur la table membre. Ta requête te sort donc toutes les réponses qui collent avec ta condition sur messages, soit deux lignes, multiplié par le nombre de lignes dans ta table membre puisqu'elles collent toutes. Tu dois avoir 5 lignes dans cette table.
    Tu devrais pouvoir retirer la table membre de ta requête (tu n'en tiens pas compte dans tes résultats) ou ajouter une condition de jointure pour ne pas les prendre toutes en compte .

    Corrige d'abord le problème de la requête pour obtenir le résultat que tu veux, tu t'occuperas du problème mysql/mysqli ensuite, mais n'essaye pas de traiter les deux problèmes à la fois si tu ne maîtrises pas bien le sujet.
    0
  3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    Il est préférable de séparer la requête... de son exécution... et de la mettre un peu en forme (avec des retours à la ligne) afin de la rendre plus lisible..(ah...bizarre.. je pensais te l'avoir dis dans ton précédent message... ^^ )

    Bref ..comme ceci :
    $sql="SELECT ids
           ,date
           ,expeditaire
           ,destinataire
            ,sujet
           ,pseudo 
    FROM messages, membre 
    WHERE destinataire = '".$_SESSION['login']."'";
    $reponse=mysqli_query($sters,$sql);
    $donnees = mysqli_fetch_array($reponse);
    


    Ensuite,

    Comme le père te l'indique et comme je l'ai fais dans ta discussion précédente... tu n'as pas, dans ta requête, de "jointure" entre tes deux tables.

    Lorsque tu écris des requêtes... la première chose à faire est de les tester en direct dans ta BDD ... (en utilisant PHPMyadmin ou un logiciel comme HeidiSql (voir ici : https://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql )
    Par exemple... que donnes cette requête directement dans ta BDD ?
    SELECT id
                  ,dat
                  ,expiration
                  ,destinataire
                  ,sujet
                 ,pseudo 
    FROM mess,
            membre 
    WHERE  mess.pseudo = membre.pseudo
    AND lecture=0 
    AND pseudo='unpseudo'
    

    NB : Pour la jointure j'ai utilisé : mess.pseudo = membre.pseudo ... mais ne connaissant pas la structure de ta table je n'ai qu'imaginé....
    C'est à toi de mettre les "bons" noms des champs...
    (sachant qu'il est préférable d'avoir des jointures sur des ID numériques que sur des string (du texte).

    NB2 : il te faut également, pour tester en direct dans ta BDD.. remplacer unpseudo par ... un pseudo existant.

    Cordialement,
    Jordane
    0