forum in php / cookies / ungelesene beiträge

Roland

Enthusiast
Thread Starter
Mitglied seit
04.12.2003
Beiträge
891
Hi zusammen!
ich schreib grad nen forum, aber hab da ein kleines problem, auf dessen lösung ich gerade nicht komme: und zwar werden zB hier im Forum in der Forum-Übersicht (wo die ganzen Threads eines Forums angezeigt werden) die ungelesenen Beiträge für jeden User markiert (mit dem Icon und fettdruck). Das will ich bei mir auch implementieren, meine Idee war bisher, einfach für jeden Thread zu merken, wann der User ihn das letzte Mal geöffnet hat, und das als Cookie zu speichern. Wenn dann das Datum des letzten Postings eines Threads neuer ist als der entsprechende Cookie Eintrag, wird der Thread als ungelesen markiert.
Aber bei einem Forum wie z.B. HWLUX wäre das nicht praktikabel, denn das Cookie wäre ja dann viel zu groß (130k Threads bei HWLUX momentan).
Als Lösung könnte man zwar auch nur die Threads betrachten, die nicht älter als 1 Woche sind, aber vielleicht habt ihr ne bessere Idee?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
mach das doch in der datenbank, wenn du einen benutzerlogin hast ;)

gruß
hostile
 
ja pff, dann hab ich im falle hwluxx im worst case: 130kx25k einträge in der datenbank nur dafür :)
 
Wenn du unbedingt ein eigenes Forum coden willst, schau doch mal wie dieses Problem bisher gelöst wurde, z.B. beim phpBB. (Ich weiß es nicht auswendig)
 
Hi,
hmm mal überlegen das einfachste ist ein datum vom letzten besuch. Sobald der User einen thread liest wird dieses datum aktualliesiert. Aber alle threads die neuer sind als das alte datum werden von der ID her in einer session gespeichert und einzeln rausgelöscht wenn der jeweilige thread gelesen wurde. Ich denke das wäre noch einfach und logisch.

MfG
Alex
 
das wären im schlechtesten fall bei 300 usern x 130.000 threads 39mio. datensätze lol. aber ich glaube kaum, dass ein user alle threads durchliest... ausserdem musst du erstmal auf 130k threads und 300 user kommen... ;)

gruß
hostile
 
Nascar schrieb:
Hi,
hmm mal überlegen das einfachste ist ein datum vom letzten besuch. Sobald der User einen thread liest wird dieses datum aktualliesiert. Aber alle threads die neuer sind als das alte datum werden von der ID her in einer session gespeichert und einzeln rausgelöscht wenn der jeweilige thread gelesen wurde. Ich denke das wäre noch einfach und logisch.

MfG
Alex

Danke schonmal für die Antworten!
Also das läuft im Prinzip wieder auf meinen Ansatz raus. Weil die Session ist ja weg wenn sich der user ausloggt bzw browser schließt. Daher muss man das dann vorher als cookie oder eben in ner datenbank speichern. Aber ich komm da wohl nicht drum rum.
Saug mir grad den code von phpbb, mal schauen, wie die das machen :)
Das Forum funktioniert btw schon. Sind mehr die details die noch ausgearbeitet werden müssen (eben dieses Problem).Code bisher 25kB
 
nene ich meinte das so.
Der User geht auf die Seite. Es werden alle Beitrags ID's seit dem Letzten mal in einer Session gespeichert. Sobald der User einen der neuen Threads anklickt wird dieser Thread als gelesen angezeigt. D.h. alle ungelesen beiträge werden da durch als ungelesen makiert, dass die ID in der Session steht.
Nach dem die ganzen Thread IDs dann in der Session stehen wird das Cookie auf das Aktuelle Datum gesetzt.
Da brauchst du keine datenbank für ungelesene beiträge

EDIT die thread id's speicherst du am besten als string durch | getrent.
also $_SESSION['unreaded'] = "1|32|123|1222|3131";

EDIT:
Dabei könnte das mit den auslesen der neuen beiträge so ausssehen:
PHP:
<?
$sql = "SELECT
	  ID
	FROM
	 threads
	WHERE
	 timestamp = '".$_COOKIE['lastvisit']."'";
$result = mysql_query($sql) OR die(mysql_error());
$unreaded = "";
while($row = mysql_fetch_assoc($result)){
 $unreaded =. $row['ID']."|";
}
$date = time();
setcookie('lastvisit', $date, time() + 99*99*99*99);
?>

MfG
Alex
 
Zuletzt bearbeitet:
ahh! jetzt versteh ich dich!
Der Ansatz gefällt mir, ich probier das mal.
Vielen Dank Alex!
 
ok, die sache hat 1-2 probleme:
a) wenn ich in einem forum A bin, und jemand etwas in einem anderen forum B postet, ich refreshe (und damit den lastvisit wieder aktualisiere), und in das Forum B wechsel, dann sind die threads nicht markiert, in denen die andere Person gepostet hat.
Lösung wäre vielleicht lastvisist für jedes forum zu speichern (im cookie).
b) hab ich vergessen :fresse:
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh