PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Über neue private Nachricht informieren


koerschgen2001
14.03.2006, 12:06:32
Ich würde gerne eine Funktion schreiben die anzeigt wenn ein User eine neue private Nachricht hat.


Man könnte in jeder Seite, eine Datenbankabfrage ausführen die prüft ob neue Nachrichten vorhanden sind.
Halte ich aber für zu umständlich, außerdem wird damit wieder die Datenbank belastet.

Eine Idee wäre wenn der Benutzer angemeldet ist, eine Session Variable zu registrieren ($_SESSION["newmessage"]),
wenn der Benutzer eine neue Nachricht erhalten hat. Da sowieso auf jeder Seite gepüft wird ob der Benutzer
angemeldet ist könnte ich das direkt mit der Überprüfung einer neuen Nachricht kombiniern.
Sollte das der Fall sein wird auf der Seite angezeigt dass eine neue private Nachricht vorhanden ist.

Das Problem an der Sache ist, dass das script zum hinzufügen einer neuen Nachricht ja vom
Absender(und damit von seiner Session) gestartet wird. Um meine Idee zu verwirklichen müsste ich
eine Variable für eine bestimmte Session, die vom Empfänger, registrieren, was bedeuten würde dass ich von außen auf die
Session zugreifen muss, was wohl nicht möglich sein wird(Sicherheitsproblem).

Wie kann ich denn in dieser Richtung eine Lösung finden, oder sollte ich besser komplett umdenken?

vt1816
14.03.2006, 21:29:25
Mit reinem PHP ohne eine Abfrage (egal wie) wird sich nichts machen lassen. Wie soll sonst die Information transportiert werden. Eine Möglichkeit wäre zum Beispiel aber bei einer neuen Nachricht eine Datei (0 Byte) anzulegen (wenn nicht schon vorhanden) und beim Seitenwechsel darauf abzufragen. So umgehst Du jedoch schon mal die Datenbankabfrage. Nicht anders machen es auch die großen Anbietern von Freemail (web.de).

koerschgen2001
14.03.2006, 22:38:15
Die Nachrichten und die Anzahl der neuen werden sowieso in der DB gespeichert.

Das was ich vorhabe ist dass wenn der User eingeloggt ist, sofort angezeigt wird ob dass er eine neue Nachricht hat.

Es muss also nur temporär gespeichert werden dass eine neue Nachricht da ist, also solange der User online ist oder er das Postfach öffnet.

vt1816
14.03.2006, 23:00:20
Wo(bei) ist denn dann Dein Problem?

Der User meldet sich an, eine Funktion schaut in seinem Postfach nach, Post vorhanden (Flag=TRUE) bzw. keine Post vorhanden (Flag=FALSE). Merken des Flags in Cookie bzw. Session bis zur Abmeldung und dann das Flag löschen. Der Traffic auf der Datenbank sollte dabei nicht so groß sein, das sich daraus Probleme ergeben. Es werden sich ja nicht alle (1..1000) User gleichzeitg anmelden und das in der Stunde 60 mal - oder?

koerschgen2001
14.03.2006, 23:08:41
Und was ist wenn der User eine Nachricht bekommt wenn er schon angemeldet ist. Nach dieser Lösung würde er das erst bei der nächsten Anmeldung mitbekommen.

Das nach der Anmeldung zu überprüfen ist ja kein Problem, aber ich möchte das dass auch angezeigt ist, während er online ist. So können 2 User die eingeloggt sind miteinander kommunizieren, da sie direkt sehen wenn sie ne neue Nachricht haben.

meikel (†)
15.03.2006, 03:22:44
Ich würde gerne eine Funktion schreiben die anzeigt wenn ein User eine neue private Nachricht hat.
Das Fahrrad wurde schon mehrfach erfunden.

Bevor Du lange überlegst:
a. ohne Datenbank geht es nicht.
b. eine Änderung des Sessionmechanismus, daß session_1 mit session_2 Infos austauschen, ist dann möglich, wenn als Speichermedium eine Datenbank eingesetzt wird. http://de3.php.net/session_set_save_handler (Userkommentare)

koerschgen2001
15.03.2006, 08:24:58
Das Fahrrad wurde schon mehrfach erfunden.
Das dachte ich mir auch, habs aber bisher nicht gefunden.

koerschgen2001
16.03.2006, 09:44:36
Das Fahrrad wurde schon mehrfach erfunden.

Wie wurde es denn erfunden. Ein paar Quellen wo ich Beispiele finde wäre nicht schlecht.

Ich könnte mir auch son fertiges Forum (wbb, phpbb...) nehmen und versuchen darin diese Funktion zu finden.

Aber das wird wohl seeeeehr lange dauern.

Besser wäre wenn mit jemand ein Beispiel, Lösungsansatz, etc dafür geben könnte.

Marilu
16.03.2006, 15:03:23
Besser wäre wenn mit jemand ein Beispiel, Lösungsansatz, etc dafür geben könnte.Haste doch hier von meikel gekriegt.

koerschgen2001
16.03.2006, 15:25:52
eine Änderung des Sessionmechanismus, daß session_1 mit session_2 Infos austauschen, ist dann möglich, wenn als Speichermedium eine Datenbank eingesetzt wird.
Haste doch hier von meikel gekriegt.
Also doch die Sache mit den Sessions. Dachte nicht dass ich mit meiner Idee direkt eine sinnvolle Lösung treffe.

vt1816
16.03.2006, 17:13:01
Also doch die Sache mit den Sessions ... und der Datenbank!

meikel (†)
17.03.2006, 00:27:57
Das dachte ich mir auch, habs aber bisher nicht gefunden.
http://de3.php.net/session_set_save_handler -> Userkommentare
Dort findest Du Beispiele für mysql- und postgres basierte Sessionhandler.

Einige Forenscripte basieren auch darauf, die Sessiondaten serialisiert in einer Datenbank abzulegen.

meikel (†)
17.03.2006, 00:33:08
Dachte nicht dass ich mit meiner Idee direkt eine sinnvolle Lösung treffe.
Mit filebasiertem Sessionmanagement wäre es absolut nicht sinnvoll.
1. müßte man das Session Temp mit hunderten von Files umgraben
2. hättest Du dann noch das Problem, abgelaufene Sessions überhaupt zu erkennen.