Ich möchte da mal kurz meine Anmerkungen machen, ohne eine fertige Lösung anzubieten.
ich möchte natürlich gerne wissen wer gerade angemeldet bzw. online ist.
das sind zum einen 2 verschiedene Sachen.
1. Wer gerade "Online" ist, wirst du nie rausfinden. Du kannst feststellen welche IP-Adresse auf deiner Seite ist. Das speichern der Ip-Adresse ist aber nicht erlaubt, wenn kein Hinweis vorhanden ist.
2. Wer gerade "angemeldet" ist, das ist kein Problem.
Und diese Aussagen sind aber auch insofern falsch, dass du mit den einfachen Mittel wie php und Datenbank nicht machen kannst. Du kannst nicht den momentanen Zustand feststellen.
Lassen wir mal den Zustand "Online" ausser Betracht.
Also ein User meldet sich an(normalerweise da folgendes überprüft:
-> Gültigkeit der Eingabe, Überprüfung auf schädliche Zeichen;
-> Überprüfung ob Username und Password übereinstimmen
-> Überprüfen ob User bereits angemeldet ist (wird oft vernachlässigt, ist aber sehr wichtig)
und bei erfolgreicher Überprüfung wird der User eingeloggt, d.h. in einer Datenbank wird z.b. in der tabelle t_login ein Eintrag gemacht wie:
userID = 2
loginDate = 1231231213 (in Form eines Timestamp)
logoutDate = 0
und sinnvoll ware dann auch noch eine $_SESSION['login']=1 setzen. Mit dieser Session-Variable kannst du am Anfang bei jeder Seite im Login-Breich dann abfragen ob der User eingeloggt ist, und ob er dann überhaupt die Seite anschauen darf. Diese Abfrage ist wichtig, da sonst der User über die direkte Seiteneingabe in der
URL auch ohne Anmeldung kommen würde. Aber das nur am Rande.
Also hast du jetzt eine Datenbank, die dir alle eingeloggten User anzeigt, und die kannst du wie gewünscht mit einer DB-Abfrage wie "Select userID from t_login where logoutDate = 0" dieses anzeigen. Meldet sich der User ab mit einem Button, dann wird in seinem Eintrag in t_login logoutDate mit dem Timestamp versehen, somit ist er nicht mehr 0 und wird auch dann bei der Abfrage nicht mehr angezeigt. Man könnte auch den Eintrag löschen, somit würde aber die Select-Abfrage dann anders aussehen. Ist Ansichtssache. Ich speichere sie lieber.
Soweit ist das eine einfache Sache und relative schnell gemacht.
Aber leider gibt es ein großes Problem, oder besser gesagt 2 Probleme.
1. Der User loggt sich ein, und geht dann Kaffee trinken oder sowas. Die Sessions warden vom Server nach einer bestimmten Zeit (je nach Einstellung so ca. 20 Min) wenn keine Tätigkeit mehr zu verzeichnen ist vom Apache-Server gelöscht. Kommt der User wieder, und er klickt munter in dem Login-Bereich rum, dann weiß der Server überhaupt nicht mehr was Sache ist. Deshalb ist die o.g. Variable wichtig und sollte immer abgefragt werden also ist $_SESSION['login'] vorhanden und ist $_SESSION['login']=1, dann darfst du weitermachen, wenn nicht gehe auf die Seite z.B. "Warnung" mit dem Hinweis "Ihre Sitzung ist abgelaufen melden sie sich erneut an...." Diese Meldung kennt doch jeder. Also muss er sich neu anmelden und die DB wird dementsprechend aktualisiert. Wenn es so läuft ist es kein Problem. Wenn er sich aber nicht mehr sofort anmeldet, dann wird er in der Liste t_login angezeigt.
2. Der User schließt einfach die Seite, also haben wir das gleiche Problem. Die Datenbank erfährt nie, dass er weg ist.
Zusammenfassend kann man also sagen, dass diese Anzeige nur funktoniert, wenn der User sich ordentlich abmeldet, und das ist so meine Erfahrung sehr selten der Fall. Also wirst du das mit
PHP und DB nicht lösen können, weil der Server im Normalfall nur auf Aktion vom Client reagiert, und wenn von diesem nichts kommt, dann passiert auch nichts.