Problème espace messagerie php mysql
Résolu
Asteroide
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 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
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 !
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 !
A voir également:
- Problème espace messagerie php mysql
- Espace insécable - Guide
- Espace de stockage gmail plein - Guide
- Espace stockage google - Guide
- Hotmail messagerie - Guide
- Messagerie double - Guide
3 réponses
'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?
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?
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
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.
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.
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 :
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 ?
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
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
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