Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyświetlanie użytkowników aktualnie zalogowanych
henio
post
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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ł?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
Lejto
post
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
Lion_87
post
Post #3





Grupa: Zarejestrowani
Postów: 850
Pomógł: 120
Dołączył: 15.02.2007
Skąd: Łódź

Ostrzeżenie: (10%)
X----


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"

Ten post edytował Lion_87 22.12.2007, 20:15:09
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #4





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Polecam: Creating a “Who’s Online” script with PHP


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
henio
post
Post #5





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
bogdan89
post
Post #6





Grupa: Zarejestrowani
Postów: 320
Pomógł: 36
Dołączył: 28.08.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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...
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #7





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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).


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
henio
post
Post #8





Grupa: Zarejestrowani
Postów: 237
Pomógł: 1
Dołączył: 15.10.2004
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Lejto
post
Post #9





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:30