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

Signaler
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
-
patheo
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014
-
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

Messages postés
10
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
10 février 2010

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"]);
}
Messages postés
10
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
10 février 2010

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?
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014

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.
Messages postés
10
Date d'inscription
samedi 13 mars 2004
Statut
Membre
Dernière intervention
10 février 2010

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... ^^
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014

[.\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?
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014

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?
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014

ok je vais essayer tout ça et je te tiens au courant. merci
Messages postés
40
Date d'inscription
mercredi 17 janvier 2007
Statut
Membre
Dernière intervention
29 septembre 2014

bonjour mkl238!
j'ai essayé tes propositions et ca marche. merci