Problème espace messagerie php mysql
Résolu/Fermé
Asteroide
-
5 mars 2015 à 19:49
jordane45 Messages postés 38453 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 mars 2025 - 6 mars 2015 à 09:40
jordane45 Messages postés 38453 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 11 mars 2025 - 6 mars 2015 à 09:40
A voir également:
- Problème espace messagerie php mysql
- Espace insécable - Guide
- Hotmail messagerie - Guide
- Espace de stockage gmail plein - Guide
- Easy php - Télécharger - Divers Web & Internet
- Espace stockage google - Guide
3 réponses
ElementW
Messages postés
4814
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 227
5 mars 2015 à 20:54
5 mars 2015 à 20:54
'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?
Utilisateur anonyme
6 mars 2015 à 08:53
6 mars 2015 à 08:53
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.
jordane45
Messages postés
38453
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
11 mars 2025
4 740
Modifié par jordane45 le 6/03/2015 à 09:41
Modifié par jordane45 le 6/03/2015 à 09:41
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
6 mars 2015 à 00:26
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