CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

systeme message lu/pas lu [php]

jacman
jacman
Niveau 11
09 décembre 2006 à 21:27:27

bonsoir c´est moi, sa faisait logntemps :-)

voila je suis de retour (pas pour vous jouer à un mauvais tour) mais pour une peite aide.
J´aurais ientot fini mon projet que j´ai commencer depuis 1 mois maitenant, c´est un nouveau systreme de forum que je fais genre phpbb, mais en mieux XD.

bref, voila, j´arrive pas a faire le systeme d emessage lu/non lu que l´on peu voir un peu partout, j´ai essayez le tuto du site du zéro, mais il marche pas chez moi, si vous pouviez me mettre sur la voi,
par exemple avec ce qu´a utilisé deepblue :rire:

bien voila, merci de votre aide :-)

deepblue
deepblue
Niveau 16
09 décembre 2006 à 22:28:19

ben je fais ça avec (encore) des fichiers ! C´est pas aussi fiable qu´un phpbb mais ça fonctionne !
Je met l´id des forum a vister fans un fichier propre au pseudos du connecté, idem pour les sujets et quand je fais mes boucle pour affichier mes forum et poste, je look si l´id du forum ou du sujet existe dansle fichier

jacman
jacman
Niveau 11
09 décembre 2006 à 22:37:28

arf ok, ouai c´est assez ingénieux ton truc mais bon, je connais pas trop les fonctions de fichier encore,
non le truc avec le timestamp ma l´air bien mais bon ...

jacman
jacman
Niveau 11
10 décembre 2006 à 09:54:54

j´ai pensé à enregistré le timestamp de chacun des posts lu, dans un cookie (mais un seul), ensuite je regarde si le numéro du post est bien dans le cookie, si oui, c´est qu´il est lu ...

en fait c´est un peu comme toi deepblue, sauf que je le fais avec des cookies.

par contre si jamais quelqu´un ost dans un sujet déja lu, je sais pas comment faire pour dire au cookie de remettre à zéro ...

roalalalalala :-)

Alik-Mior
Alik-Mior
Niveau 3
10 décembre 2006 à 09:59:54

Tu vire le cookie non ?

jacman
jacman
Niveau 11
10 décembre 2006 à 10:07:03

oui mais si je met un cookie pour chaque sujet, sa va faire beaucoup, et je veux éviter ca...

jehuty21
jehuty21
Niveau 10
10 décembre 2006 à 10:59:27

Une méthode très efficace: crée une table qui contiendra l´id du membre, l´di du sujet et l´id du dernier message lu par ce membre.

De cette façon, tu sauras très facilement si on a lu ou pas un sujet.

Quand tu afficheras la liste des sujets, tu fais une jointure sur cette table (si l´on est connecté) pour récupérer l´id du dernier message lu ou 0 si on a jamais lu le sujet (select coalesce(id_last_msg, 0) as id_last_msg)

Quand tu feras ta boucle pour afficher les sujets, tu n´auras qu´a faire une ou deux conditions:
- si le dernier message lu est 0, c´est non lu
- sinon si le dernier message lu est plus petit que l´id du dernier message posté dans le sujet, c´est non-lu
- sinon c´est lu.

Tu peux aussi mettre quelques trucs en places pour éviter qu´il n´y aies trop de lignes dans cette table (mais si tu n´as que 500 membres, ça sert à rien)

jacman
jacman
Niveau 11
10 décembre 2006 à 11:09:54

euh ouai ok, mais j´ai pas trop envi de faire une requete pour ca, relmarque je peut le faire avec des cookies non ?

bin je vais me faire un schéma, puis je vous dirais ce que j´ai fait :-)

jehuty21
jehuty21
Niveau 10
10 décembre 2006 à 11:12:10

Tu as bien une requête pour récupérer les sujets, non?
Bah alors une jointure ne va tuer personne.

Et ta méthode avec des cookies, c´est du gros bricolage, comment il fait celui qui n´active pas les cookies?

jacman
jacman
Niveau 11
10 décembre 2006 à 11:19:07

oui c´est vrai :rire:

mais alors tu peux m´expliquer plus clairement stp ?

Quand tu afficheras la liste des sujets, tu fais une jointure sur cette table (si l´on est connecté) pour récupérer l´id du dernier message lu ou 0 si on a jamais lu le sujet (select coalesce(id_last_msg, 0) as id_last_msg)

ca j´ai pas tout compris :-)

jehuty21
jehuty21
Niveau 10
10 décembre 2006 à 11:22:01

bah crée la table, donne moi les noms des champs et la requête que tu utilises pour récupérer tes sujets et je te montrerai

jacman
jacman
Niveau 11
10 décembre 2006 à 11:49:21

ok merci :

table (sb_sysmsg)
champs : id_mem, id_suj, id_dern_lu (sont tous en INT)

ma requete :
$requete = query("SELECT * FROM ".$prefix."post WHERE forum=´$id´ AND sujet=´´ ORDER BY place DESC");

merci :-)

jehuty21
jehuty21
Niveau 10
10 décembre 2006 à 11:56:48

Vérifie le nom des champs/tables

$id_user -> l´id de l´utilisateur connecté (0 = pas connecté)

query("select t1.*, coalesce(id_dern_lu, 0) as id_dern_lu
from ".$prefix."post t1
left join ".$prefix."sysmsg on id_mem = ".$id_user." and id_suj = t1.sujet
where forum = ".$id."
order by place desc");

// select *, c´est lourd et moche, nomme toutes le
s colonnes

jacman
jacman
Niveau 11
10 décembre 2006 à 13:21:06

arf j´ai rine compris, tu m´explquer la requete que tu viens de me mettre la s´il te plait :-)
oué je sais je suis chant, mais javou que je comrpend rien a la requete ...
je sais pas quoi mettre a la place de t1 en plus.

deepblue
deepblue
Niveau 16
10 décembre 2006 à 14:34:57

question stupide :
Si tu te fis qu´au dernier id lu, tu peux te tromper non ? Car tu peux tres bie,n avoir le dernier post du forum sans pour auant avoir lu le reste du forum ?

jehuty21
jehuty21
Niveau 10
11 décembre 2006 à 12:41:15

Deepblue, à quoi tu parles?
Si c´est à moi, tu as du mal comprendre ma méthode.

J´ai pas envie de tout retaper, alors va lire ces posts ou j´ai expliqué cette méthode en long en large et en travers
http://www.siteduzero.com/forum-83-65803-un-systeme-de-lus-non-lus-pour-un-forum.html

Et si ça ne suffit pas, un post de winzou qui l´explique
http://www.siteduzero.com/forum-83-31469-237786.html#r237786

Si t´as des questions plus précise, demande ;)

jacman
jacman
Niveau 11
11 décembre 2006 à 13:37:23

bien, c´est bon, j´ai fait différemment mais sa marche impec,, le seul truc c´est qu´il faut être inscrit sur le forum pour savoir si il y a des sujet non lu, mais bon on va dire que ca seras original :-), je vous expique ce que j´ai fait.

A chque fois qu´un embre va voir dans un sujet, j´enregistre le dernier post du sujet en question dans la table du membre, ce qui fait que je sais si il la lu.
Ensuite pour vérifier ceci, je fais un strpos qui va rehcercher le dernier post du sujet, si celui si n´est pas inscrit dans la table, c´est qu´il ne la pas lu, sinon il est lu :-)

c´est un peu ce que vous l´avez dit, mais je l´ai diférement, en tous cas merci de votre aide :-)

jehuty21
jehuty21
Niveau 10
11 décembre 2006 à 13:40:14

C´est super lourd ta méthode, difficilement maintenant et surtout très limité.

Tu imagines la quantité de données que tu ramènes à chaque fois pour faire un simple strpos() ?

Qui plus est, pour autant qu´on lise un minimum de sujet, cette colonne deviendra énorme. Tu as mis quoi? text? longtext? Y a quand même une limite.

Crois moi, la méthode que je te propose est plus souple, pas plus compliqué, beaucoup plus rapide et beaucoup plus permissive.

jehuty21
jehuty21
Niveau 10
11 décembre 2006 à 13:41:03

Ah, au fait, comment tu fais pour remettre à non-lu un sujet quand quelqu´un poste une réponse? Tu récupères tous les sujets lu de tous les membres pour les effacer un à un?

jacman
jacman
Niveau 11
11 décembre 2006 à 13:42:56

non, je regarde si le dernier id est trouver dans le champs du membre ..

ouai je sais c´est lourd, mais j´ai pas d´autre méthode :´(

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Internet
  • Macintosh
  • Création de Jeux
  • Linux
  • Programmation
  • Steam Deck
  • Hardware