Problème espace messagerie php mysql

Résolu/Fermé
Signaler
-
Messages postés
34233
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 décembre 2021
-
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

Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 296
'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?
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

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.
Messages postés
34233
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 décembre 2021
3 859
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