Afficher les messages et les marquer comme lu [Résolu]

Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
- - Dernière réponse : patheo
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
- 10 févr. 2010 à 08:24
Bonjour!
je veux ajouter à mon site la possibilité pour les utilisateurs qui y ont un compte de recevoir des messages et de les lire.
j'ai une table dans ma base de données qui regroupe les messages.
je veux que lorsque l'utilisateur à un nouveau message, que cela lui soit notifié lors de sa connexion et que lorsqu'il clique su le l'objet, il puisse ouvrir le message et que ce message reçoive dans la base de données un statut 'Readed' pour qu'il ne soit plus compté la prochaine fois.

voici la structure de la table et le code pour compter les message non lu

UserMessage table :
IDMessage : int(11) unsinged autoincrement null index
IDUser : int(11) unsigned null
IDUserFrom : int(11) unsigned null
MsgSubject : VarChar(120) null
MsgObject : Text(2000) null
MsgState : set('Readed','NotReaded')



<?php

$Query = 'SELECT * FROM UserMessage WHERE IDUser=\''.$_SESSION['ID'].'\' and MsgState=\'NotReaded\';';
$Rq = mysql_query($Query);
$Cnt = mysql_num_rows(Rq);
if ($Cnt >= 1) {
  // afficher notification
}

?>


pour le reste des codes je plante. merci de votre aide
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
10
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
10 février 2010
3
Merci
Oui, il faut que ca soit automatique... au même titre que tu écrits les titres des messages, tu écrits tes url...

Je reprends la première requête et développe un peu plus:

$query = 'SELECT IDMessage, MsgState, MsgSubject FROM UserMessage WHERE IDUser=\''.$_SESSION['ID'].'\';';
$result = mysql_query($query);

while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
   printf ("%s
 ", $row["IDMessage"], $row["MsgSubject"]);
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 197 internautes nous ont dit merci ce mois-ci

Commenter la réponse de mkl238
Messages postés
10
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
10 février 2010
0
Merci
Bonjour,

tu as fait la majeure partie du travail. Maintenant, ça dépend fort de ta page. Au chargement de la page après le login, tu charges le code que tu as écrit et soit tu fais un div de notification qui s'affiche, soit tu changes l'image de ton logo "courrier"...

Tu plantes pourquoi précisément?
Commenter la réponse de mkl238
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
0
Merci
En fait, j'arrive à récupérer les différents éléments des messages. ce qui me bloque c'est comment changer le statut du message en 'Readed' dans la base de données quand l'utilisateur clique sur le lien (le subjet). de plus je souhaite que seul le contenu du message qui est sélectionné s'affiche.
Commenter la réponse de patheo
Messages postés
10
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
10 février 2010
0
Merci
En fait, tu dois le faire en plusieurs fois:
Un select pour récupérer le sujet, l'id et le statut de tes messages pour construire la liste.
Et un select pour récupérer le contenu du message que l'utilisateur aura cliqué suivit d'un update du statut du message.

Il ne faut pas tout récupérer d'un coup dans la première requête, car si l'utilisateur a des milliers de messages, c'est cher pour finalement n'afficher que le sujet.

Donc le premier select devient un truc du genre:

$Query = 'SELECT IDMessage, MsgState, MsgSubject FROM UserMessage WHERE IDUser=\''.$_SESSION['ID'].'\' and MsgState=\'NotReaded\';';
$Rq = mysql_query($Query);
$Cnt = mysql_num_rows(Rq);


il n'y a cas afficher tous les titres de tes messages en lien comme ceci:
[.\GetMessage.php?idMessage=351 Sujet du message]

[.\GetMessage.php?idMessage=358 Sujet du message]


l'utilisateur clique sur l'intitulé du message et on appelle second Select suivit de l'update dans GetMessage.php:

$selectQuery = 'SELECT * FROM UserMessage WHERE IDUser=\''.$_SESSION['ID'].'\' and IDMessage=\''.$_GET["idMessage"].'\';'
$updateQuery = UPDATE UserMessage SET MsgState=\'Readed\' WHERE IDUser=\''.$_SESSION['ID'].'\' and IDMessage=\''.$_GET["idMessage"].'\';'
$result = mysql_query($selectQuery);



C'est peu soigné et fait rapidement comme explication mais bon... ^^
Commenter la réponse de mkl238
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
0
Merci
[.\GetMessage.php?idMessage=351 Sujet du message]

[.\GetMessage.php?idMessage=358 Sujet du message]

je me rendcompte que dans tes lien tu as mis les idMessage de façon manuelle ca peut se faire automatiquement. ou bien je 'ai pas bien saisi ton code?
Commenter la réponse de patheo
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
0
Merci
je ne sait pas comment éditer les message. donc je complète mon post précédent:
- dois-je afficher mes liens avec une boucle while? (c'est ce que je faisais)
- comment rendre les idMessage dans les liens dynamique?
Commenter la réponse de patheo
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
0
Merci
ok je vais essayer tout ça et je te tiens au courant. merci
Commenter la réponse de patheo
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
0
Merci
bonjour mkl238!
j'ai essayé tes propositions et ca marche. merci
Commenter la réponse de patheo