User Online -> nach 3 min. aus tbl löschen Problem

Radhad

Erfahrenes Mitglied
Hallo zusammen,

ich habe ein Problem bei meiner Anzeige, wieviele User zur Zeit auf der Website sind. In der Tabelle wird die SessionID, der Timestamp des letzten Aufrufes und falls vorhanden die UserID gespeichert (sonst NULL). Natürlich muss bei jedem Aufruf der Website überprüft werden, ob der User nochmal da war. 3 minuten erschien mir da als vernünftige Zeit. Also dachte ich, ich überprüfe es wie folgt:
PHP:
$now = time();

$sql = "SELECT sessionid FROM users_online WHERE timestamp < ".($now-180)."";
$resource = mysql_query($sql);
while($offline = mysql_fetch_array($resource))
{
	$sql = "DELETE FROM users_online WHERE sessionid = ".$offline[0];
	mysql_query($sql);
}
Mein Problem ist, dass der Eintrag und die Anzeige an sich klappen (unterschied von Besucher & Mitgliedern klappt wunderbar). Aber die Aktualisierung der Tabelle, wenn der User länger als 3 Minuten (180 Sekunden) nicht mehr da war, und die Zeile gelöscht wird, klappt nicht. Kann mir jemand erklären, wieso das so nicht funktioniert?



Gruß Radhad
 
Schonmal versucht den MySQL-Error auszugeben?

PHP:
mysql_query($sql) OR DIE(mysql_error());

Außerdem, liefert mysql_fetch_array Standardgemäß nicht ein assoziatives Array zurück? Ich bin mir gerad selbst nicht ganz sicher :confused:
 
Oh man... Danke für den Hinweis (den hab ich vergessen). Ich hatte die Bedingung nicht in ' geschrieben, daher der Fehler *lacht* Manchmal sieht man vor lauter den Code die Syntax nimmer. Danke :)



Gruß Radhad
 
Wieso löschst du nicht gleich die Datensätze, die dem Kriterium der ersten Abfrage entsprechen? Damit wäre die Arbeit mit nur einer Abfrage erledigt.
 
Hmm... ich versteh nicht so ganz. Meinst du das vielleicht so:
PHP:
$sql = DELETE FROM users_online WHERE timestamp < ".($now-180);
mysql_query($sql);
 
@g3radiochris: Das ist mir natürlich klar. Dasi st bei mir mehr oder minder der Nebneffekt, da angezeigt werden soll, wer von den Mitgliedern online ist (die Anforderung ist nicht von mir). Man ist immer an den Reload des User's gebunden.

Ich habe noch ein Problem: wenn man länger afk ist, läuft wohl die Session ab, denn die 'userid' wird auf NULL gesetzt (hab nicht drauf geachtet ob die SessionID gleich bleibt), aber man ist dann noch eingeloggt. Wie kann ich verhindern, dass die SessionID abläuft? Bisher wird sie nur in der tabelle users_online abgespeichert. Wäre das dann eine Art Auto-Login Funktion, die mir fehlt? Habe so etwas noch nie gemacht...



Gruß Radhad
 
Zurück