Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]
Forum PHP.pl > Forum > PHP
qrcze_pieczone
Witam
Chciałbym uzyskać taki efekt jak to ma miejsce w przypadku tego forum czyli na dole pokazuje się kto edytuje dany post bądź kto jest w danej chwili na forum.

Możliwe że ten temat był już poruszany na forum, ale jakoś mi się nie udało trafić na niego.
Oczywiście za podpowiedzi bądź linki do stron gdzie ta tematyka była poruszana z góry dziękuję.
pozdrawiam
b_chmura
zliczasz ile osób jest on-line i sprawdzasz czy któraś z nich nie jest użytkownikiem Twojego serwisu
qrcze_pieczone
no ok ale jak sprawdzić ile osób jest on-line? na serwerze

jak będę to wiedział to cała reszta jest już pestką

Ja myślałem nad takim rozwiązaniem że w tabeli użytkownicy zrobię jedno pole które domyślnie będzie miało wartość 0 i w przypadku jak się ktoś będzie logował to będzie się pojawiała wartość 1 jak sie wyloguje to znowu będzie 0 ale pojawia się wtedy problem gdy ktoś nie kliknie na wyloguj tylko np wpisze w oknie przeglądarki inny adres

Wydaje mi się, że na pewno jest jakieś lepsze rozwiązanie.
Darti
Zapisuj sobie w bazie informacje o sesji i czasie, kiedy była odświeżana i do kiedy jest ważna (np 5 minut ważności - taki bazodanowy expire time).
Na każdej podstronie wywołujesz funkcję, klasę, która odświeży (update'uje) wpis dla danej sesji na aktualny czas i +5 minut czas.
Inna funkcja sprawdza bieżący czas i robi zapytanie do bazy, które sesje (a właściwie ile ich jest) mają czas ostatniego działania mniejszy i czas ważności większą niż czas bieżący i na tej podstawie określasz ilu masz zalogowanych/odwiedzających w danym momencie użytkowników.

edit:
Trochę namieszałem...
Zapisz sobie 3 pola w bazie: nr sesji, czas aktualny dla tej sesji, czas +5 minut dla tej sesji
Zliczaj ilość sesji aktualnych.
=57=
ponizej taka przykladowa klasa sprawdzajaca kto jest online smile.gif kod tragicznie lopatologiczny i amatorski ale coz poradzic gdy nie jest sie pr0-coderem smile.gif mysle ze sposob dzialania (i myslenia winksmiley.jpg ) jest jasno opisany w komentarzach smile.gif

(nie wiem po co ID sesji w tym kodzie bo bez tego chyba tez dziala ;o zamotalem sie piszac te linijki.. wystarczy poswiecic 30sec nad tym i podopoisywac co trzeba winksmiley.jpg wiem ze skrypt dziala, tragicznie, ale dziala:)))

  1. <?php
  2. class Onliner{
  3. function whos_online(){
  4. bd::connect();
  5.  
  6. //zapisujemy sobie id sesji :)
  7. $sid = session_id();
  8. //a teraz sobie czas aktualny zapisujemy
  9. $czas = date('G:i:s',time());
  10. //obliczamy do kiedy user bedzie uwazany za ONLINE (obecny czas + 10min)
  11. $vTo = time() + 60*10;
  12. //vTo zamieniamy na jakis ladny zapis, zeby czlowiek byl w stanie rozczytac godzin
    e
  13. $validTo = date('G:i:s',$vTo);
  14. //sprawdza czy juz jest taki user online
  15. $q = 'SELECT * FROM TOnline WHERE who = "'.$_SESSION['player'].'"';
  16. $r = mysql_query($q);
  17. $row = mysql_fetch_row($r);
  18. //jesli nie jest to tworzy nowy wpis w SQL pod warunkiem ze ktos jest zalogowany
  19. if($row == NULL){
  20. if(isset($_SESSION['player'])){ //jesli jest zalogowany
  21. $q = 'INSERT INTO TOnline VALUES("'.$sid.'","'.$validTo.'","'.$_SESSION['player'].'")';
  22. }else{//jesli nie jest zalogowany
  23. //jesli jest juz wpis to przedluza termin zalogowania o ile ktos sie zalogowal
  24. if(isset($_SESSION['player'])){
  25. $q = 'UPDATE TOnline SET validTo = "'.$validTo.'" WHERE who = "'.$_SESSION['player'].'"';
  26. }
  27. //kasuje graczy ktorzy sa offline
  28. $q = 'DELETE FROM TOnline WHERE validTo < "'.$czas.'"';
  29. mysql_query($q) or die("sraka");
  30. //wypisuje graczy online
  31. $q = 'SELECT * FROM TOnline';
  32. $r = mysql_query($q);
  33.  
  34. echo'<br>gracze online:<br>';
  35. while($uO = mysql_fetch_array($r)){
  36. $i++;
  37. <a href="index.php?m=playerInfo&a=show&w='.$uO['who'].'">'.$uO['who'].'</a><br>
  38. ';
  39. }
  40. }
  41. }
  42. ?>
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.