Vorerst: Das ist keine Modifikation für das phpBB!
Hallo,
Ich weiß, dass mit AJAX Updates in einer MySQL-DB durchgeführt werden können. Nun suche ich aber einen Codeabschnitt, der, sollte jemand auf die Seite klicken den Wert einer Tabelle (MySQL) auf 1 stellt, verlässt er diese Seite aber wieder zurück auf 0 stellt.
Gibt es solch ein Codestück, oder könnte es vielleicht einer machen?
mfg
Javascript und MySQL
Eine wirklich zuverlässige Methode, um das Verlassen der Seite zu erkennen, gibt es nicht. Mögliche Lösungsansätze sind:
- Regelmäßiges aktualisieren eines Timestamps; wenn dieser mehr als x Sekunden lang nicht aktualisiert wird, wird der Benutzer als abwesend deklariert (so wird es bei phpBB gemacht).
Vorteil: funktioniert unabhängig vom Client
Nachteil: Bei niedrigen Aktualisierungsintervallen träge Reaktionszeit; bei hohen Intervallen hohe Serverbelastung - Beim Verlassen der Seite wird per Javascript onunload Event ein Popup geöffnet, welches den Benutzer abmeldet. In Kombination mit Frames wird verhindert, dass der Status bei jedem Seitenwechsel kurz auf Offline gesetzt wird
Vorteil: Der Status wird sofort beim Verlassen geändert
Nachteil: Wenn der Benutzer Javascript deaktiviert oder einen Popup-Blocker hat, funktioniert die Variante gar nicht. - Ständig offen lassen eines Sockets.
Vorteil: Der Status wird sofort beim Verlassen geändert. Zusätzlich können über den Socket Server-Push Nachrichten übertragen werden
Nachteil: Auf Clientseite nur mit Plugins (z.B. Java, Flash) oder eingeschränkt mit Ajax möglich. Sofern man keinen speziell für diesen Zweck programmierten Server benutzt, sondern den normalen Webserver benutzt, bleibt ständig ein Prozess pro Benutzer aktiv; bei den meisten Shared Hostern werden solche Programme deshalb explizit verboten.
KB:knigge
Ich habe nun mit meinen minimalistischen JavaScript-Kenntnissen ein Script erstellt, jedoch funktioniert da was noch nicht ..
Der Wert wird schon beim Eintreten auf 1 gesetzt
Code: Alles auswählen
<?php
include("ZUGRIFFSDATEI");
?>
<html>
<head>
<script type="text/javascript">
if(window.onunload)
{
</script>
<?php
$result = mysql_query("UPDATE test SET action='Onunload' WHERE id='2' LIMIT 1");
?>
<script type="text/javascript">
alert("Verlassen");
}
</script>
</head>
<body>
<p>OnUnload-Test</p>
</body>
</html>
An dem Code ist so ziemlich alles falsch, was man irgendwie falsch machen kann
.

- If-Blöcke kann man nicht einfach so über mehrere <script> Tags verteilen
- PHP wird immer auf Serverseite ausgeführt und Javascript erst dann, wenn die Seite zum Browser gesendet wurde - deine Kombination aus JS+PHP kann also nicht funktionieren.
- onunload ist ein Event-Handler und keine Variable. Anleitung: http://de.selfhtml.org/javascript/sprac ... m#onunload
- Da die aktuelle Seite ja beim onunload bereits geschlossen wird, ist die einzige Möglichkeit, noch eine Anfrage an den Server zu senden, ein Popup-Fenster zu öffnen: http://de.selfhtml.org/javascript/objek ... w.htm#open
KB:knigge