Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyświetlanie użytkowników aktualnie zalogowanych
Forum PHP.pl > Forum > Przedszkole
henio
Zastanawiam się obecnie nad skryptem, który wyświetli mi zalogowanych użytkowników.
Mam tabele: forum_uzytkownicy, gdzie przechowuje dane o userach. Myślałem, że mogę to rozwiązać przez utworzenie tabeli zalogowani, gdzie dodawałbym nicki przy logowaniu a usuwał przy wylogowywaniu. Jednak taki sposób nie jest dobry, ponieważ można opuścić stronę bez wylogowywania. Pytam się, więc czy ktoś ma jakiś pomysł?
Lejto
można to zrobić na określony czas ale nie wiem jak np. sprawdzianie np. po 30 min od zalogowania albo po upływie sesji czy użytkownik jest obecny na stronie (czy wykonał jakieś kliknięcie) jeżeli go nie będzie to go wywali z bazy tylko nie wiem jak to zrobić już kiedyś o tym też myślałem ale na marne bo i tak mi sie nie udało
Lion_87
Zrób dodatkową kolumne np: online
w momencie gdy ktoś sie zaloguje to bedzie ona zmieniona na tak
a gdy sie ktos wyloguje to na nie

a potem już tylko zapytanie
select count(online) from baza where online="tak"
JaRoPHP
Polecam: Creating a “Who’s Online” script with PHP
henio
Cytat(Lion_87 @ 22.12.2007, 20:14:48 ) *
Zrób dodatkową kolumne np: online
w momencie gdy ktoś sie zaloguje to bedzie ona zmieniona na tak
a gdy sie ktos wyloguje to na nie

a potem już tylko zapytanie
select count(online) from baza where online="tak"

Już o tym pisałem, że to nie jest do konca dobry pomysł, bo można wyjsc z strony bez wylogowania

Cytat(JaRoPHP @ 22.12.2007, 20:19:38 ) *

Dzięki za link, z pewnością skorzystam z tego sposobu.

Utworzyłem plik online.php, ktory potem includowany do pliku index.php

  1. <?php
  2. define ('TIMEOUT', 5);
  3. $ostatnio_online = time();
  4. $zapytaj = mysqli_query($mysql, "SELECT * FROM forum_online WHERE nick == '".$_SESSION['user']."'");
  5.  
  6. if($zapytaj == false)
  7. {
  8. $zapytaj1 = mysqli_query($mysql, "INSERT INTO forum_online (nick, ostatnio_online) VALUES ('".$_SESSION['user']."', '".$ostatnio_online."')");
  9. }
  10. else
  11. {
  12. $zapytaj2 = mysqli_query($mysql, "UPDATE forum_online SET nick = '".$_SESSION['user']."', ostatnio_online = '".$ostatnio_online."'");
  13. }
  14.  
  15. $aktywnosc = time()-(60*60*TIMEOUT);
  16. $wywal_nieaktywnego = mysqli_query($mysql, "DELETE FROM forum_online WHERE ostatnio_online < $aktywnosc");
  17.  
  18. $zapytaj_o_online = mysqli_query($mysql, "SELECT * FROM forum_online ORDER by ostatnio_online");
  19.  
  20. if(count($zapytaj_o_online) == 0)
  21. {
  22. echo "Niestety nie ma nikogo online\n";
  23. }
  24. else
  25. {
  26. echo "<table>\n";
  27. echo "<th>Nick</th><th>Ostatnio online</th>\n";
  28. while($zapytaj_o_online1 = mysqli_fetch_assoc($zapytaj_o_online)) 
  29. {
  30. echo "<tr><td>".$zapytaj_o_online1['nick']."</td>";
  31. echo "<td>".date('g:i:s', $zapytaj_o_online1['ostatnio_online'])."</td></tr>\n";
  32. }
  33. echo "</table>\n";
  34. }
  35. ?>

Przy odświeżaniu zamiast zmieniać się data ostatniego bycia online dodaje mi się kolejny. Np:
Henio 8:58:09
Henio 8:59:21
Henio 8:59:30
Henio 8:59:35
Henio 9:01:48

Już ten błąd rozwiązałem
bogdan89
a ja zrobilbym to w ten sposob, ze dodalbym kolumne do bazy danych z tymi userami ...
przechowywalbym tam czas ostatniej aktywnosci usera

po prostu przy kazdym odswiezeniu strony, wykonuje sie funkcja ktora robi update bazy danych dla danego usera...

proste:
1) instrukcja warunkowa czy przegladajacy strone jest zalogowany
2) wyciaganie id zalogowanego
3) update rekordu usera
zapisujesz w tym rekordzie aktualną date z sekundami

pozniej tylko sprawdzasz kiedy byl ostatnio, jesli np. max 3 min. temu, to wyswietlasz...
JaRoPHP
Do stwierdzenia, czy osoba jest on-line użyj mysqli_num_rows" title="Zobacz w manualu PHP" target="_manual i na tej podstawie buduj warunki (kiedy INSERT, kiedy UPDATE).
henio
Cytat(JaRoPHP @ 22.12.2007, 21:29:11 ) *
Do stwierdzenia, czy osoba jest on-line użyj mysqli_num_rows" title="Zobacz w manualu PHP" target="_manual i na tej podstawie buduj warunki (kiedy INSERT, kiedy UPDATE).

O tym samym pomyślałem winksmiley.jpg. Zrobiłem i wchodzę na forum i czytam twój post o tym wlasnie, ale dzięki za pomoc:

  1. <?php
  2. define ('TIMEOUT', 5);
  3. $ostatnio_online = time();
  4. $zapytaj = mysqli_query($mysql, "SELECT * FROM forum_online WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND nick = '".$_SESSION['user']."'");
  5. $ile = mysqli_num_rows($zapytaj);
  6. if($ile<1)
  7. {
  8. $zapytaj1 = mysqli_query($mysql, "INSERT INTO forum_online (nick, id_forum_user, ostatnio_online, ip) VALUES ('".$_SESSION['user']."', '".$id_forum_user."', '".$ostatnio_online."', '".$_SERVER['REMOTE_ADDR']."')");
  9. }
  10. elseif($ile>=1)
  11. {
  12. $zapytaj2 = mysqli_query($mysql, "UPDATE forum_online SET nick = '".$_SESSION['user']."', id_forum_user = '".$id_forum_user."', ostatnio_online = '".$ostatnio_online."', ip = '".$_SERVER['REMOTE_ADDR']."' WHERE id_forum_user = '".$id_forum_user."'");
  13. }
  14.  
  15. $aktywnosc = time()-(60*TIMEOUT);
  16. $wywal_nieaktywnego = mysqli_query($mysql, "DELETE FROM forum_online WHERE ostatnio_online < $aktywnosc");
  17.  
  18. $zapytaj_o_online = mysqli_query($mysql, "SELECT * FROM forum_online ORDER by ostatnio_online ASC");
  19.  
  20. if(count($zapytaj_o_online) == 0)
  21. {
  22. echo "Niestety nie ma nikogo online\n";
  23. }
  24. else
  25. {
  26. echo "<table>\n";
  27. echo "<tr><th colspan='2'>W ciągu ostatnich 5 minut byli:</th></tr>\n";
  28. echo "<tr><th>Nick</th><th>Godzina</th></tr>\n";
  29. while($zapytaj_o_online1 = mysqli_fetch_assoc($zapytaj_o_online)) 
  30. {
  31. echo "<tr><td>".$zapytaj_o_online1['nick']."</td>";
  32. echo "<td>".date('H:i', $zapytaj_o_online1['ostatnio_online'])."</td></tr>\n";
  33. }
  34. echo "</table>\n";
  35. }
  36. ?>
Lejto
zmodyfikowałem twój kod ale mam problem ten sam co ty
Cytat
Henio 8:58:09
Henio 8:59:21
Henio 8:59:30
Henio 8:59:35
Henio 9:01:48

Żeby zmieniało a nie dodawało tego samego usera trzeba ten kod zastosować?
  1. <?php
  2. if($zapytaj == false)
  3. {
  4. $zapytaj1 = mysqli_query($mysql, "INSERT INTO forum_online (nick, ostatnio_online) VALUES ('".$_SESSION['user']."', '".$ostatnio_online."')");
  5. }
  6. else
  7. {
  8. $zapytaj2 = mysqli_query($mysql, "UPDATE forum_online SET nick = '".$_SESSION['user']."', ostatnio_online = '".$ostatnio_online."'");
  9. }
  10. ?>

czy zastosować jaką inną instrukcje np. sprawdza czy user jest w bazie jeśli tak to nie dodaje rekordu tylko updatuje
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.