Boite de reception PHP

Fermé
carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020 - 26 juin 2018 à 18:32
jordane45 Messages postés 38416 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 février 2025 - 27 juin 2018 à 19:19
Bonjour, j'ai besoin d'aide je créé un chat entre deux personne i fonctionne, mais je voudrais que l'utilisateur puisse avoir une sorte de boite de réception pour tout ces message.
j'ai déjà fait un petit bou de code qui récupéré les messages est le affiche

Mon problème : je veut juste récupéré le dernier message de chaque utilisateur avec qui il/elle a parler, est les afficher l'image en dessous,



au lieu d'afficher : Salut virginie sa va ?, et t'habite ou ? de raven.spencer je veux afficher juste T'habite ou ? qui est le dernier message  

3 réponses

jee pee Messages postés 40780 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 12 février 2025 9 521
Modifié le 26 juin 2018 à 18:37
Salut,

Tu n'a pas indiqué le contexte technique.

Si tes messages sont enregistrés dans une base de données, pour avoir le dernier cela ressemble à cela :

select .... from messages
where ...
order by date_msg
limit 1 


1
carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020 1
26 juin 2018 à 18:44
oui mes messages son dans une bdd , ta méthode sa limit le messages a 1 imagine si 5 personne lui on envoyer des messages par exemple cette méthode va afficher juste la dernière
0
carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020 1
26 juin 2018 à 18:47
en gros c'est que je veux ce même si le même utilisateur lui a envoyer 15 message, je veux juste afficher sa dernière message idem avec touts les autres avec qui il a parler
0
jee pee Messages postés 40780 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 12 février 2025 9 521 > carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020
Modifié le 26 juin 2018 à 18:54
tu vois que tu n'as pas donné assez de détails au départ, il faut une question avec toutes les infos

dans ce cas je ferais quelque chose comme

select ... from message
where (mesg_emetteur, date_mesg) in 
   (select mesg_emetteur, max(date_mesg) from message
    where mesg_dest= ...
    group by mesg_emetteur)
and mesg_dest= ...
0
carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020 1
26 juin 2018 à 19:04
j'essai sa merci
0
carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020 1
26 juin 2018 à 19:22
sa marche mais sa m'affiche juste le dernier message d'un seul user je veux récupérer les dernières messages des tout les users qui lui on envoyer un message

  $msg = $db->prepare("SELECT * FROM chat_prive 
  LEFT JOIN users ON users.id = chat_prive.id_pseudo
  WHERE (id_to, date_message) 
  in (select id_to, max(date_message) 
  FROM chat_prive 
  WHERE id_to = '$user_one')");
$msg->execute();
$msg = $msg->fetchAll();
0
carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020 1
26 juin 2018 à 20:02
la il m'affiche plus rien
$msg = $db->prepare("SELECT * FROM chat_prive 
  LEFT JOIN users ON users.id = chat_prive.id_pseudo
  WHERE (id_pseudo, date_message) 
  in (select id_pseudo, max(date_message) 
  FROM chat_prive 
  WHERE id_to = '$user_one') 
  group by id_pseudo");
$msg->execute();
$msg = $msg->fetchAll();
0
jordane45 Messages postés 38416 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 février 2025 4 734
26 juin 2018 à 22:26
Bonjour,

Déjà.... où as tu vu qu'on pouvait écrire un where de cette sorte
WHERE (id_pseudo, date_message) 
  in (select id_pseudo, max(date_message) 

A la limite:
WHERE id_pseudo  in (select id_pseudo, max(date_message  FROM chat_prive )


Tu t'en serais rendu compte si tu avais pris la peine de tester ta requête DIRECTEMENT dans ta BDD (via PHPMYADMIN par exemple).

Ensuite, Tu n'as pas activé la gestion des erreurs PDO ni placé tes requêtes dans des blocs TRY/CATCH. je t'invite vivement à le faire pour détécter ce genre d'erreur.
Voir ici pour les explications : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Si, après ces corrections, le souci persiste, reviens nous voir avec :
- Le code modifié (qu'on puisse voir comment tu as tenu compte de nos précédentes remarques)
- Un "dump" de ta BDD ( structure + quelques données de test) que l'on puisse faire des essais de notre côté si besoin.
Pour faire un DUMP en phpmyadmin : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/eximport-phpmyadmin

.
0
jee pee Messages postés 40780 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 12 février 2025 9 521 > jordane45 Messages postés 38416 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 février 2025
27 juin 2018 à 08:36
Salut,

C'est moi qui ai proposé
WHERE (id_pseudo, date_message) 
  in (select id_pseudo, max(date_message) 


Cela n'existe pas avec mysql ? Ce code fonctionne avec Oracle
0
jordane45 Messages postés 38416 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 février 2025 4 734
27 juin 2018 à 08:47
Alors en fait.... mea-culpa .... si.. c'est possible en mysql. (je ne pensais pas).

Par contre ça ne change pas les autres remarques que j'ai fait. :-)
0
carterj Messages postés 44 Date d'inscription lundi 4 septembre 2017 Statut Membre Dernière intervention 3 août 2020 1
27 juin 2018 à 18:47
sa marche toujours pas est oui j'ai activer les erreurs de pdo
0
jordane45 Messages postés 38416 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 12 février 2025 4 734
27 juin 2018 à 19:19
Montres ton code modifié
Si tu as bien tout fait comme expliqué dans le lien...tu devrais avoir un message d'erreur sur ta requête !
0