Afficher les messages et les marquer comme lu

Résolu
patheo Messages postés 40 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 29 septembre 2014 - 9 févr. 2010 à 10:01
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

8 réponses

mkl238 Messages postés 10 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 10 février 2010
9 févr. 2010 à 21:23
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"]);
}
3
mkl238 Messages postés 10 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 10 février 2010
9 févr. 2010 à 16:48
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?
0
patheo Messages postés 40 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 29 septembre 2014
9 févr. 2010 à 17:42
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.
0
mkl238 Messages postés 10 Date d'inscription samedi 13 mars 2004 Statut Membre Dernière intervention 10 février 2010
9 févr. 2010 à 20:23
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... ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
patheo Messages postés 40 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 29 septembre 2014
9 févr. 2010 à 21:00
[.\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?
0
patheo Messages postés 40 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 29 septembre 2014
9 févr. 2010 à 21:23
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?
0
patheo Messages postés 40 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 29 septembre 2014
9 févr. 2010 à 21:48
ok je vais essayer tout ça et je te tiens au courant. merci
0
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 mkl238!
j'ai essayé tes propositions et ca marche. merci
0
Rejoignez-nous