Jak wyświetlić ilość zalogowanych użytkowników w PHP?

Piotr Kowalczyk
20.08.2015

Potrzebujemy do tego bazy danych i systemu logowania. W tym artykule nie będę pisał, jak taki system stworzyć, ponieważ na naszym wortalu jest osobny artykuł o tym. Jednak będziemy używać kilku funkcji do logowania. Zacznijmy od bazy, która będzie miała tabele: nick, haslo i czas. Rozwiązanie naszego problemu będzie polegało na czasie w formacie uniksowym, czyli ilość sekund od początku ery uniksowej (1 stycznia 1970). Podczas logowania skrypt będzie dodawał do tabeli `czas` aktualny czas uniksowy. Następnie skrypt, który będzie wyświetlał użytkowników online, pobierze tych, których ostatnia aktywność odbyła się max 10 minut temu, czyli 600 sekund. Podczas każdego przeładowania jakiejkolwiek podstrony, odpowiedni skrypt będzie aktualizował tabelę `czas` o aktualny czas uniksowy, podczas wylogowania ustawiony zostanie na 0.

Zaczynamy od skryptu logowania. Nie będziemy tutaj robić żadnych formularzy, gdyż jak wspomniałem wcześniej, istnieje osobny artykuł do całego systemu.

 

if(!session_is_registered("uzytkownik")){
$zap1=mysql_query("select * from `uzytkownicy`  WHERE `nick` = '$login' and `haslo` = '$haslo' ");   
if(mysql_num_rows($zap1) > 0){
session_register("uzytkownik");
$_SESSION['login'] = $login;
  $czas = date("U");
    $sql = mysql_query("update `uzytkownicy` set `czas` = '$czas' where `nick` = '$login'");   
    }

 

 

Jak widać zarejestrowaliśmy sesję, pobraliśmy czas z serwera i zaktualizowaliśmy tabelę naszego użytkownika o ten właśnie czas uniksowy. Następnie stworzymy mały skrypt, który wkleimy we wszystkich naszych podstronach, aby czas był aktualizowany przy każdym wejściu na którąś z nich. Oczywiście, jeżeli użytkownik jest zalogowany.

 

 

 

$login = $_SESSION['login'];
$sql = mysql_query("update `uzytkownicy` set `czas` = '$czas' where `nick` = '$login'");

 

 

Podczas rejestrowania sesji, zapamiętaliśmy login użytkownika w ciasteczkach a w powyższym kodzie wykorzystaliśmy go. Kod powinien być na każdej podstronie.

Teraz czas na skrypt, który wyświetli nam wszystkich zalogowanych użytkowników.

 

 

$czas_teraz = date("U");
$czas_max = $czas_teraz - 600;

$sql_zalogowani = mysql_query("select * from `uzytkownicy` where `czas` BETWEEN '$czas_max' AND '$czas_teraz'");

if(@mysql_num_rows($sql_zalogowani) < 1){
    echo 'brak';
} else {

    echo (mysql_num_rows($sql_zalogowani));
    echo '

  • ';
            while($dane = mysql_fetch_array($sql_zalogowani)){
       
                echo '
  • '.$dane['nick'].'
  • ';
       
        }

      echo '
';

}

 

 

 

Skrypt wyświetli nam użytkowników, ktorych czas aktywności był pomiędzy czasem 10min temu a czasem aktualnym. To by było wszystko, jednak potrzebujemy skryptu, który wyloguje użytkownika i ustawi wartość pola `czas` na 0:

 

 

$login = $_SESSION['login'];
$sql = mysql_query("update `uzytkownicy` set `czas` = '0' where `nick` = '$login'");   
session_destroy();

 

 

Cały skrypt jest już gotowy. Nie jest on bardzo skomplikowany, jednak wszyscy mogą go dowolnie modyfikować do swoich potrzeb :)

Zgłoś swój pomysł na artykuł

Więcej w tym dziale Zobacz wszystkie