PDA

Vollstndige Version anzeigen : Seite verlassen, Funktion ausfhren


Zudecke
19-07-2004, 13:46
Servus.
Hab da echt ein Problem, bei dem ich nicht weiter wei: Beim Verlassen der Seite soll noch eine PHP-Funktion ausgefhrt werden. Wie kann ich das bewerkstelligen? Mit dem JavaScript-Event "onUnload" gehts nicht. Auer ich mach da noch ein PopUp auf, indem ich schnell die Funktion ausfren lasse und dann gleich schliee. Aber find ich nicht gerade sauber. Was kann ich machen?

Gru

c4
19-07-2004, 13:58
Du kannst PHP nur aufrufen, in dem Du eine Seite ldst.

onUnload funktioniert zum Glck nur bei Frames, Du wirst Dir also was anderes ausdenken mssen.


Was hast Du denn vor?

mad-boy
19-07-2004, 13:59
Original geschrieben von Zudecke
Was kann ich machen?

Kurze Antwort: Gar nichts! :(

PHP ist Serverseitig und wird nur beim Aufruf einer Seite ausgefhrt, du weit also gar nicht wann die Seite geschlossen wird. Die einzigste Mglichkeit ist, wie du schon sagtest, ber PopUps o.. eine Seite aufzurufen die sich dann wieder selber schliesst.

Normalerweise arbeitet man mit Timeouts, das heit z.B. hier im Forum: Wer ist online: Dort werden dann beispielsweise alle User angezeigt die in den letzten 5 Minuten eine Seite aufgerufen haben.

Gruss, Michael

Zudecke
19-07-2004, 14:28
Die aktuellen Benutzer bei mir werden ausgegeben. Wenn sie die Seite verlassen, sollen sie aus der DB gelscht werden bzw. da soll vermerkt werden, dass sie nicht mehr online sind. Und das sollte passieren, sobald sie wirklich nicht mehr da sind.

c4
19-07-2004, 14:31
Wie mad-boy schon sagte: Das geht nicht!

Du musst bei jedem Seitenaufruf alle Daten, die lter als n Sekunden/Minuten sind lschen.

xabbuh
19-07-2004, 14:33
EDIT: Da war ich ein bisschen langsam...

Das wirst du so nicht hinkriegen. Aber wie oben schon weiter beschrieben knntest du es hnlich machen, wie hier im Forum:

In der Tabelle zwei Felder:
name //Name des Benutzers
zeit //Zeit der letzten Aktion des Benutzers (sollte bei jeder Aktion aktualisiert werden)

Und dann kannst du immer, wenn jemand die Seite aufruft, alle User aus der Tabelle lschen, die beispielsweise lnger als 5 Minuten inaktiv waren:


<?php
mysql_query("DELETE FROM tabelle WHERE zeit<'" . (time()-300) . "'");
?>

Zudecke
19-07-2004, 15:46
Ok, das mit dem Timeout zieh ich mal in Betracht ;-) .

Ich httes jetzt trotzdem mal mit so nem PopUp versucht. Eigentlich ganz schmuck das Teil, "Verbindung wird beendet." und so.
Aber wie kann ich jetzt wieder unterscheiden, ob die Seite aktaulisert wird, oder ob er wirklich geht. Das PopUp sollte ja dann nur im letzteren Fall geffnet werden.
Wei da auch noch jemand Rat?

c4
19-07-2004, 15:48
Aber wie kann ich jetzt wieder unterscheiden, ob die Seite aktaulisert wird, oder ob er wirklich geht. Gar nicht. Entweder Du nutzt Frames oder Du lsst es mit dem PopUp.

Auerdem: Was machst Du denn bei Leuten, die einen PopUpBlocker nutzen??

Zudecke
19-07-2004, 15:54
Das versteh ich noch nicht so ganz. Wie knnen mir Frames dabei helfen? die werden doch genauso geschlossen bzw. aktualisiert.

c4
19-07-2004, 15:58
Es gibt diese Unart von blinden Frames: Zwei Stck, eins 100% gro und das andere 0%. Der Nutzer sieht also nur eins. Alles, was passiert, passiert in den 100%.

Um mal kurz abzuschweifen: Auch 0% sind 100% 0%... ;)

Gut, zurck zum Thema: Das onunload packt man in das 0%-Ding. Da es nie gendert wird, sondern hchstens geschlossen, wre das eine Lsung fr Dein Problem. Aber auch Quelle fr viele neue Suchmaschinenprobleme.

Entscheide Dich lieber dagegen!

Zudecke
19-07-2004, 16:03
Aber wenn ich den Browser aktualisere, wird auch der 0%-Frame zu 100% aktualisiert, womit ich wieder zu 100% 0% gewonnen htte.

c4
19-07-2004, 16:04
Stimmt zu 100%.

Da man dem Nutzer aber nicht verbieten kann mal auf F5 zu drcken, wirst Du Dir wohl doch was anderes ausdenken mssen.

Zudecke
19-07-2004, 16:35
Registrierungszwang? Aber damit vergrault man ja die ganzen Besucher.
Ach menno.

xabbuh
19-07-2004, 16:36
Original geschrieben von Zudecke
Registrierungszwang? Aber damit vergrault man ja die ganzen Besucher.
Ach menno.

Auch wenn ich registriert bin, kann ich die F5 Taste drcken ;-) Da wrde eine Registrierung also nicht viel bringen.

Was hast du eigentlich so gegen die Umsetzung mit Hilfe eines Timeouts?

Zudecke
19-07-2004, 16:44
Dachte jetzt, weil man da nen Log-out machen kann, aber das schtzt ja auch nicht vor willkrlichem Schlieen des Browsers...

Es sollte halt wenigstens nach ein paar Sekunden sichtbar sein, wenn jemand nicht mehr da ist.

c4
19-07-2004, 16:46
Es sollte halt wenigstens nach ein paar Sekunden sichtbar sein, wenn jemand nicht mehr da ist. Dann setz den Timeout auf 5 Sekunden. Desto krzer diese Dauer, desto eher siehst Du, ob wer online ist oder nicht.

Zudecke
19-07-2004, 16:53
Wie. Gelscht wird doch dann, wenn er eine bestimmte Zeit inaktiv war. Was ist, wenn er grad fr was 10 Sekunden berlegen muss? Dann ist er weg, obwohl er noch da ist.

c4
19-07-2004, 17:02
Original geschrieben von Zudecke
Wie. Gelscht wird doch dann, wenn er eine bestimmte Zeit inaktiv war. Was ist, wenn er grad fr was 10 Sekunden berlegen muss? Dann ist er weg, obwohl er noch da ist. Darum macht man meist auch ca. 5 Minuten...

Zudecke
19-07-2004, 17:14
HA, jetzt hab ichs! Ich schick von der Seite alle 10 Sekunden ne Eintragung an die Datenbank (0%-Frame), und im Benutzerfenster frag ich ab, ob eine Rckmeldung schon lnger als 10 Sek. zurckligt. Wenn das der Fall ist hau Ihn raus.
Bin ich genial?

c4
19-07-2004, 17:17
Bin ich genial? Tief durchatem! 23 - 22 - 21 - ...

Erst einmal musst Du Deine Idee umsetzen, dann erst kannst Du draufwi***en. ;)

So denn, ran an die Tastatur!

Zudecke
19-07-2004, 17:54
HipHipHurraa. Das haut hin wie die Sau :-)) . Und was soll ich damit jetzt machen? draufwi***en?? Ist es das was ich denke was es ist?

c4
19-07-2004, 17:56
Gratuliere!

Und was soll ich damit jetzt machen? draufwi***en?? Ist es das was ich denke was es ist? hm... ich wrde sagen, dass errtern wir jetzt nicht genauer... ;)

Zudecke
19-07-2004, 17:58
Danke
und
Einverstanden
;-)