WER ist gerade online anzeige

marvinlol

Erfahrenes Mitglied
hallo,

ich brauche mal einen Gedanken Anstoß von euch !

Ich lese in vielen Foren lösungen darüber, anzuzeigen, wie viele Benutzer sich gerade auf einer Seite befinden.

Ich möchte auf meiner Seite anzeigen, welche User im Moment online sind.
Die user loggen sich vorher mit ihrer E-mail und ihrem password ein. Das wird in einer Session gespeichert.

Vielleicht kann mir jemand nen Vorschlag geben, wie ich das lösen kann. (Theorie)

Vielen Dank !
 
Hallo!

Lege einen Zeitraum fest nach welchem der User bei Inaktivität als offline anzusehen ist.
Diese Info bzw. der dazu gehörige Timestamp wird in der Benutzerdatenbabnk gespeichert und während der Aktivität aktualisiert.

Zu dem Thema findest Du genug Beiträge.

Gruss Dr Dau
 
Du erstellt in mysql eine Tabelle mit zb is_online.
Mit einer Dpalte in der du einen Timestamp speichert und einer Spalte wo den Usernamen aus der Session schreib.
Dann schreib du eine Query die bei jeden Aufruf den aktuellen Timestamp und den Username in die db schreibt und eine Query die jeden Eintrag löscht der älter als 5 Minuten ist
 
Zuletzt bearbeitet:
und einer Spalte wo den Usernamen aus der Session schreib

Kannst du beschreiben, wie ich das genau mache ?

Wenn man sich einloggt, werden die SESSIONS registriert:

PHP:
$data = mysql_fetch_array ($result); 
$_SESSION["user_id"] = $data["Id"]; 
$_SESSION["user_Nickname"] = $data["Nickname"];

aber wie schreibe ich dann den Usernamen in die DB ? Und wann?

Danke für eure antworten !
 
Hey,

wenn du beispielsweise die Spalte `time` in deiner User-Tabelle im DATETIME Format erstellst, prüfst du einfach wie lange der letzte Klick des Users her ist.

Ich habe das so gemacht: Jeder User registriert sich und ein neuer Eintrag ensteht in der User-Tabelle. Da ist bei mir `time` solange auf 0 gesetzt, bis der User sich das erste Mal dann auch wirklich eingeloggt hat. Beim ersten Login gibt es ein UPDATE des Users:

Code:
mysql_query("UPDATE `users` SET time=NOW() WHERE id='".$_SESSION['user_id']."'");

Jetzt überprüfe ich immer dann, wenn die Variable $_SESSION['user_id'] gesetzt ist (weil es sich nur dann um einen registrierten User handelt). Das heißt, wenn man als Seitenbesucher eine Session ID gesetzt hat, dann wird immer obiger Code ausgeführt.

Und zur Ausgabe, überprüfe einfach wie lange es her ist mit dem letzten Klick des Users. So zum Beispiel:

PHP:
$result = mysql_query("SELECT `name` FROM `users` WHERE TIMESTAMPDIFF(MINUTE,`time`,NOW()) AS min <= 10");

while ($user= mysql_fetch_array($result)) {

echo "$user['name']: Letzte Aktivität vor ".$user['time']." Minute(n)."; # Ausgabe aller User, die online sind

}

Wenn nun der Timestamp nicht älter oder gleich 10min ist, wird der Name des Users ausgegeben. Du kannst natürlich alles andere dafür ausgeben.

Hoffe das konnte helfen!

Liebe Grüße,

Lisa
 
Ich konnte lisali´s Post jetzt ganz gut nachvollziehen und habe diesen Code daraus gemacht:

PHP:
<?php


include("mysql.php");

if ($_SESSION['user_id'] > 0) {

mysql_query("UPDATE `benutzerdaten` SET time=NOW() WHERE Id='".$_SESSION['user_id']."'");

}

$result = mysql_query("SELECT `Nickname` FROM `benutzerdaten` WHERE TIMESTAMPDIFF(MINUTE,`time`,NOW()) AS min <= 10");

while ($user= mysql_fetch_array($result) or die(mysql_error())) {

echo "".$user['Nickname'].": Letzte Aktivität vor ".$user['time']." Minute(n).";

} 


?>

Jetzt bekomme ich als mySQL Fehler folgendes:

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/web2/html/test/php/login/useronline.php on line 15
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS min <= 10' at line 1


Ich steige da selbst im Moment garnicht mehr durch.
Ab dem WHERE im 2. query verstehe ich es nicht mehr.
Könnt ihr mir da vielleicht helfen?
 
Die Fehlermeldung besagt, dass du dich wahrscheinlich verschrieben hast bei dem SELECT. Die Tabellen-Spalte wurde nicht gefunden. Vielleicht musst du auf Groß- und Kleinschreibung achten, um das Problem zu lösen.

Versuche mal ein
Code:
echo mysql_error();
nach den Datenbank-Abfragen zu setzen, damit der MySQL-Fehler besser beschrieben wird.

LG,

Lisa


Edit:

So überprüfe ich, ob eine $_SESSION['user_id'] gesetzt ist:

PHP:
if (!empty($_SESSION['user_id']))

Also, wenn die Variable nicht (= !) leer (= empty) ist. Du kannst aber auch

PHP:
if (isset($_SESSION['user_id']))

benutzen und überprüfst so, ob die Variable gesetzt ist. Da kannst du genauso ein ! vor dem isset hinzufügen, aber das bräuchtest du in deinem Fall ja jetzt nicht, da du ja nur eine Ausgabe erfolgen lassen willst, wenn die Variable gesetzt ist.
 
Zuletzt bearbeitet:
Hi,

bisst du dir sicher, dass es nicht am

PHP:
AS min <= 10

liegt?
Schließlich bekomme ich davon ja auch die Fehlermeldung.
Ich habe die Schreibweisen beachtet aber es kommt der gleiche Fehler.

MfG Danke..
 
Hallo!

Es gibt eine MySQL Funktion namens "min".
Daher solltest Du, wie bei jedem anderen Spaltennamen auch, selbigen in Backticks stetzen:
PHP:
AS `min` <= 10
Gruss Dr Dau
 
Zurück