[php/html] problème de cookie pour un forum fait par mes mains;)

problème de cookie pour un forum fait par mes mains;) [php/html] - Programmation

Marsh Posté le 01-10-2001 à 21:57:02    

Voilà, je fait mon petit forum en ce moment.
http://www.lanstadium.fr.st
Mais ya un truc que je sais pas faire.
Comment mettre dans un cookie avec tous les messages qui ont été lu et affiché un new à coté de ceux qui ont pas été lu.
Genre comme dans le forum présence, ou si le dossier est rouge, cela veut dire qu'il y a des nouveaux message et le dossier jaune clair, ça veut dire qu'il y a rien de nouveau.
C'est difficile à expliquer. Si vous pouvez m'aider, ça serait cool.

Reply

Marsh Posté le 01-10-2001 à 21:57:02   

Reply

Marsh Posté le 02-10-2001 à 00:07:11    

c'est trop fort : je suis actuellement entrain de plancher sur le même problème !!!
 
ma stratégie :  
- sélectionner nom pas la date de la dernière visite pour la comparer avec l'actuelle afin de savoir si les sujets contiennent de nouveaux messages mais plutôt de sélectionner le numéro id maximal de tous les messages pour le comparrer avec le id max de la dernière visite.
 
le probléme c'est que ça marche au premeier chargement de la page du forum. Mais admettons que le visiteur regarde un message et recharge la page principale, tous les messages sont marqué comme n'étant pas nouveaux donc ça va pas !
 
pour bien faire, il faudrait écrire dans le cookie l'id max courant lorsque le visiteur quitte le forum et nono pas à chaque chargement de la page.... et même là, les messages consultés seront identifiés comme étant nouveaux....
 
à suivre donc !

Reply

Marsh Posté le 02-10-2001 à 00:34:07    

Une petite idé :
Une table utilisateur/topic vec les zones suivantes :
id d'utilisateur
idé de tiopic
date (ou numéro de réponse ou autre élément perméttant de comparer)
Ensuie, il sufit pour chaque topic revenus de chercher la bonne entré de la table et de comparait la valeur de éféence obtenus avec celle du topic corespondant.

Reply

Marsh Posté le 02-10-2001 à 02:03:16    

oulala, tu pourrais pas donner un poil plus de détail SPV ?
 
:sarcastic:

Reply

Marsh Posté le 02-10-2001 à 11:48:24    

voilà comment je vais faire pour mon forum (pour le moment, je travaille sur la V2 de mon chat)
 
4 tables :
user
topic
reply
user_topic
 
user contient la liste des utilisateurs et contient les colones suivantes:
userid (integer & autoincrement / unique)
pseudo (char / unique)
passwd (char : mot de passe)
STAMP (datetime : sertà conaitre la date de création)
 
topic contient la liste des topics et contient les colones suivantes:
topicid (integer & autoincrement / unique)
sujet (texte)
nb_rep (integer : nombre de réponse, 0 si juste le sujet initial)
STAMP (datetime : sertà conaitre la date de création)
 
reply contient les réponses des topics et contient les reponses suivantes:
replyid (integer & autoincerment / unique)
topicid (texte : numéro du topic auquel il est rataché)
numrep (integer : numéro de réponse dans le topic, 0 si texte du message d'origine)
STAMP (datetime : sert à conaitre la date de création)
STAMP1 (datetime : sert à conaitre la date de création du denier message)
 
user_topic contient les infos pour savoir si une nouvelle réponse à été posté:
utopicid (integer & autoincerment / unique)
topicid (integer)
userid (integer)
nb_rep (integer : numéro de la dernière réponse consulté)
STAMP (datetime : sert à conaitre la date de création)
STAMP1 (datetime : sert à conaitre la date de création du denier message)
 
 
PS : les requêtes que je vais mettre en exemples sont pour mysql
 
pour savoir si un topic à été consulté, je fais de la manière suivante :
1) je cherche la liste des topics à afficher
SELECT topicid, nb_rep, sujet, STAMP,STAMP1 FROM topic ORDER BY topicid LIMIT 0,30
changer le 0 par : (le numéro de la page-1) * le nombre de topic par page
et le 30 par le nombre de topic par page
 
2) pour chaque topic, je fais la requête suivante :
SELECT STAMP1 FROM user,user_topic WHERE pseudo="toto" and  passwd="tata" and topicid=15 and user.userid=user_topic.userid
attention : il faut remplacer "toto", "tata" et le 15 par les bonnes valeurs les valeur du pseudo et du passwd peuvent être envoyer par un cookie (j'ai jamais utilisé de cookie alors, faudra ce renseigner dessus)
 
3) dans le code, je compare les STAMP1 des deux requêtes
si le STAMP1 de la requête 2<STAMP1 de la requête 1 alors afficher qu'il y a un nouveau message
sinon, pas de nouveau message
 
voilà pour la partie détection des nouveaux messages dans un topic donné
Je vous laisse faire la programmation proprement dite.
Pour cet exemple, j'ai quasiment mis que les donées minimales nécessaires à un forum. Personellement, je vais en mettre plusieurs autres afin d'essayer d'arrivé au niveau du furom d'HFR (beaucoup de boulot en perspective ;)

Reply

Marsh Posté le 02-10-2001 à 13:33:27    

ok, c'est trés clair, mais je ne veux pas mettre d'inscription à mon forum donc je n'ai pas de table user.  
 
peut-être que je peut faire une table user avec seulement le pseudo et l'adresse email sans password et donc sans inscription ???

Reply

Marsh Posté le 02-10-2001 à 15:51:38    

Alors tu peux mettre dans ton cookie un équivalent du userid.
Pour ça, il faut que tu gère un compteur de userid.
 
table compteur
compteurid
valeur
 
incrémentation :
UPDATE compteur SET valeur=valeur+1 WHERE compteurid=1
 
recherche de la nouvelle valeur:
SELECT valeur from compteur
 
Donc, si le numéro d'utilisateur n'existe pas dans le cookie, tu incrémentes le compteur puis tu met la caleur obtenue dans le cookie.
C'est cette valeur là (obtenue soit à partir du cookie soit à partir du compteur) qui va te servir à faire les requêtes sur la table user_topic .
 
Donc, plus du tout besoin d'une table user en fesant comme ça.

Reply

Marsh Posté le 02-10-2001 à 17:45:48    

Merci pour vous réponse....
sinon vous etes allé voir le forum?

Reply

Marsh Posté le 02-10-2001 à 21:10:37    

scoobidou > Comment tu fais pour gérer les cookies chez free? J'aimerais que tu m'explique tout ça par ce que là, je sais pas faire moi.

Reply

Marsh Posté le 02-10-2001 à 21:47:13    

chépo, j'utilise la fonction setcookie... rien de bien extraordinaire.  
Sinon, je viens de regarder ta méthode, c pas mal mais c un peu lourd à gérer.  
Je viens de regarder le code source du forum "phorum" et bien il font tout au cookie et c nickel..... le seul prob c que je comprends pas bien comment ils y arrivent.

Reply

Marsh Posté le 02-10-2001 à 21:47:13   

Reply

Marsh Posté le 03-10-2001 à 00:00:09    

un petit lien Scoubidoo pour le code du forum phorum
 
peut être qu'on pourra comprendre ensemble !

Reply

Marsh Posté le 03-10-2001 à 01:53:13    

Ca marche avec le php3 de free? Je croyais que c'était installer qu'à partir de php4.

Reply

Marsh Posté le 03-10-2001 à 09:10:52    

Omega > non moi la fonction setcookie marche avec free. donc php v3.
 
Oloide > http://www.phorum.org faut regarder les fichiers list.php et read.php. en plus, ya pas utilisateurs en registrés gérés dans phorum.

Reply

Marsh Posté le 03-10-2001 à 09:18:07    

scoobidoo tres jolie ton forum
 
en ce qui concerne les cookies il me semble que vous n'avez pas le choix , que vous ettes obligé de conecervé des infos des utilisateurs sur la BdD pour au moin y mettre la datede la dernière viste par exemple et apres comparé cele ci au date des differentes message pour afficher le bonne icone   qui va bien ;)
 
du moin je crois c ce que je vais faire au moin pour le miens
 
sinon moin bien , ta la possibilité de dire que les messages datant de plus d'1semaine par exemple , sont des viuex messages
 
@++++

Reply

Marsh Posté le 03-10-2001 à 14:01:32    

Citation :

sinon moin bien , ta la possibilité de dire que les messages datant de plus d'1semaine par exemple , sont des viuex messages


 
bahh ! c'est vraiment moins bien comme solution !

Reply

Marsh Posté le 03-10-2001 à 14:06:10    

vi mais c ce qui a de plus simple au cas ou  
meme si c spécialement merdicime :D

Reply

Marsh Posté le 03-10-2001 à 17:04:42    

Non je suis sur qu'on peut faire comme phorum et je sais que ça marche très bien pcq c ce forum que j'utilise encore pour mon site.
Le mien est de plabncher à plusieurs dessus.

Reply

Marsh Posté le 03-10-2001 à 22:44:07    

ouais, ben là comme ça en regardant rapidement, je comprend pas grand chose !
 
il va falloir que j'imprime les sources et que je réfléchisse longement dessus !!!

Reply

Marsh Posté le 11-10-2001 à 12:05:03    

omega2 a écrit a écrit :

voilà comment je vais faire pour mon forum (pour le moment, je travaille sur la V2 de mon chat)...




 
salut
 
merci, beaucoup car tu m'as beaucoup aidé !
 
j'ai fait une table pour chaque user (inscription maintenant possible) et une table user_sujets ...
au lieux de comparrer les dates, je comparre le dernier id (MAX(id_message)) du sujet consulté par rapport au MAX(id_message) actuel dans un sujet (topic).
 
ça marche vraiment bien : http://www.multimania.com/oloide/forum.php3
 
Mais il reste cependant un petit problème : la taille de la table user_sujets (sujet_topic) va trés vite gonflée et devenir énorme !!!
Donc je pense qu'il faut automatiser un nettoyage de la table à intervalles de temps constant patr rapport à la date de création de chaque donné...?!?

Reply

Marsh Posté le 11-10-2001 à 12:16:24    

oloide a écrit a écrit :

 
Donc je pense qu'il faut automatiser un nettoyage de la table à intervalles de temps constant patr rapport à la date de création de chaque donné...?!?  




Fait le par rapport à la date de modification des données.
Ainsi, un nétoyage fait au bout de 15 jours (ou autre duré) ne suprimera pas la référence à une discution suivit depuis plusieurs jours.
Sinon, c'est vrai qu'il faut faire un nétoyage assez régulier.

Reply

Marsh Posté le 11-10-2001 à 12:26:37    

tu vois un moyen de créer un script qui fait ça automatiquement tous les 15 jours (car je vois pas comme ça sans réfléchir) ?

Reply

Marsh Posté le 11-10-2001 à 12:33:57    

Personellement, je verais plustôt un lancement du script à chaque message posté ou à chaque lecture d'un topic ou a un autre moment de ton choix.
Ainsi, il sera lancé très souvent (bien irrégulièrement). Comme ce script ne fera que lancer une requête SQL, son exécution ne sera pas longue du tout.

Reply

Marsh Posté le 11-10-2001 à 13:33:28    

moua je bosse sur le système de cookie mais c pas simple.....

Reply

Marsh Posté le 11-10-2001 à 19:32:48    

Scoubidoo a écrit a écrit :

moua je bosse sur le système de cookie mais c pas simple.....  




 
vranchement, c'est pas trés compliqué : il suffit d'être rigoureux et consciencieux...
 
si tu as des problémes demande !

Reply

Marsh Posté le 11-10-2001 à 20:00:43    

comme tout logiciel programmé....
il faut un algo.

Reply

Marsh Posté le 11-10-2001 à 21:20:03    

Scoubidoo a écrit a écrit :

comme tout logiciel programmé....
il faut un algo.  




 
oui d'ailleur comme je n'ai aucune notion d'algo, mais script se transforme vite en gros bordel :D

Reply

Marsh Posté le 17-10-2001 à 08:18:11    

ça y est, je crois que ça marche.
donc sans insérer des données à tout va dans MySQL.
ça a été la galère mais on y arrive....ouf!

Reply

Marsh Posté le 18-10-2001 à 10:12:11    

ça marche bien !  
 
c'est quoi ta méthode ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed