Forum en php : message lus-non lus

Guillaume k Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
Zarghal Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis en train de réaliser un forum pour mon site.
Sur de nombreux forums, on peut observer les messages qu'on a lu ou non et je souhaiterais mettre en place ceci sur mon forum. Seulement je ne sais pas comment faire.
Je souhaiterais donc, si quelqu'un le sait, savoir comment faire sachant que mon site utilise php5 et mysql5.

Merci d'avance.

8 réponses

InAme19 Messages postés 539 Date d'inscription   Statut Membre Dernière intervention   62
 
creer un champ INT état dans ta base de donnée, dans ta table commentaire
S'il est égal à 0 par exemple, tu considere qu'il est non lu
et s'il est égal à 1, lu.
ensuite c'est du php, tu fais une requete qui selectioone ton champ état et en fonction de sa valeur tu affiche lu ou non-lu (ou tu donne donne un effet de style, c'est toi qui voit)
5
Guillaume k Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
 
Oui mais ce n'est pas parce qu'un membre a lu un message que tous les autres membres les ont lus.
Si je fait ce que tu dis, lorsque un membre consulte un message du forum, la colonne 'lunonlu' de la table message prendra la valeur 'lu'. Donc lorsqu'un autre membre ira sur le forum, les messages qu'il n'a pas encore lu seront marqués comme lu car le membre précèdent les a consultés.
Ce que tu me dis là, c'est ce que j'ai fait pour la messagerie privé.
2
Guillaume k Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
 
Je n'ai pas bien compris, peut-être que je me suis mal exprimé.
Je donne le détail du forum dans la base de données :
- une table catégorie
- une table forum
- une table sujet
- une table messages
Il y a une table pour les membres.
Je réitère ma question : Comment chaque membre peut-il savoir pour chaque message s'il l'a lu ou pas ?

Merci d'avance
1
toto
 
inAme19 a raison, dans la table message tu dois créer une colonne nommé par exemple messageNonLuOuLu.
Grace à cette colonne, s'il y a un nouveau message qui s'insère dans la table message, alors la colonne messageNonLuOuLu prendra la valeur NonLu, donc la requète serait:
$requète="insert into message (..., ..., ..., messageNonLuOuLu) values (..., ..., ..., NonLu)";

Ainsi lorsque un nouveau message est inséré alors la valeur par défaut de la colonne messageNonLuOuLu sera NonLu.

Par conséquent lorsque le membre consulte ces message, il verra à coté de chacun de ces messages le mention 'Non lu' grace à ce simple code:

if($line[messageNonLuOuLu]=='NonLu')
{echo"Non Lu";}

Et lorsque le membre clique sur le message pour le consulter, alors sur la page du message complet , ajoute ce code qui permet transformer la valeur NonLu en Lu pour la colonne messageNonLuOuLu:

$request="update message set messageNonLuOuLu='Lu'";

Voilà !
1

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

Posez votre question
Zarghal Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   5
 
Bonjour,

Voilà, je suis dans la même situation que toi Guillaume... Je cherche désespérément comment faire pour que les messages apparaissent comme lus ou non lus selon le membre.

De plus, il faut réussir à palier le problème qu'on peut constater sur beaucoup de forum actuel :
Lorsque l'on se déconnecte (via le bouton déconnecté ou en supprimant les cookies, cache et tout), les messages non lus sont considérés comme lus bien que ce ne soit pas le cas.

Après quelques heures à me creuser la tête, j'aurais bien proposé un système de Log sauvegarder dans un champ BLOB de la table message qui stockerait le ID des membres qui l'on lu. Ainsi, il suffit de récupérer le fichier de log, de le consulter et de voir si l'ID du membre se trouve dans le log ou non.
-> Si c'est le cas, il l'a lu
-> Si ce n'est pas le cas, il ne l'a pas lu

Ce système permet aussi d'éviter qu'un effacement des traces considère tous les messages comme lus (ce qui particulièrement ennuyant).

Voilà, c'est une proposition de solution (pas encore testé). Si, de ton côté, tu as trouvé un moyen plus simple, merci de me renseigner à ce sujet.
1
krika5
 
pluto utiliser une table recevoir avec comme propriété l'id du recepteur , l'id du message , et un champ non lu !!!

tu rempliras le champ non lu à chaque fois qu'un message sera lu . mais cela n'agira que sur l'utilisateur ou le membre ayant l'id du recepteur .
1
Zarghal Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   5
 
Quand je vois que tu utilises le mot "Récepteur", je me demande si tu ne parles pas de la boîte mail interne d'un forum. Si c'est le cas, sache qu'en fait, on parle du fait de savoir si un message est lu ou non au niveau du forum (bref, des réponses aux différents sujets postés).

Si tu parlais bien de ça, je pense que ce que tu proposes est bien pour un tout petit forum... Mais imagine s'il y a 5000 messages avec 1000 utilisateurs... Ça voudrait dire que tu n'auras pas moins de 5 000 000 d'entrées dans ta table, le tout ordonné n'importe comment (vu qu'à chaque fois qu'un utilisateur voit un message non lu, une entrée est rajoutée dans la table)... Et pire, imagine qu'on supprime carrément le sujet avec une centaine de réponses, tu imagines le temps qu'il faudra pour retrouver tout ce qui concerne les messages supprimés et tout ?

Ce que je propose, c'est que dans chaque entrée correspondant à un message posté par un utilisateur, on stocke l'ID des personnes l'ayant lu. Ainsi, quand la personne se connecte, elle voit les messages où sont ID n'apparait pas comme étant non lu et quand elle arrive sur le(s) message(s) en question, le fichier .txt stocké dans le champ de type BLOB de la base de données est mis à jour avec son ID.
Comme ça, on évite une surcharge de données et si le sujet est supprimé, il suffit de supprimer simplement les messages en rapport et automatiquement, la liste des utilisateurs ayant lu le message sera supprimée avec.
1
Guillaume k Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   3
 
Personne pour m'aider ?

Merci d'avance
0