Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Online, Jak zrobić funkcje online.
Johnas
post
Post #1





Grupa: Zarejestrowani
Postów: 650
Pomógł: 16
Dołączył: 5.07.2010
Skąd: Ściśle Tajne

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


Witam zastanawiam się jak zrobić funkcje online. Myślałem nad zrobieniem tabeli online i tam id usera = $_SESSION['id'] oraz czy jest online czy też nie (1/0)... To było by nawet proste ale jak zrobić aby po 5 minutach nieaktywności zmieniła się wartość na off i jak sprawdzać aktywność? na każdej stronie robić update table ? Widziałem tutaj jeden artykuł ale był słabo opisany... Pozdrawiam
Go to the top of the page
+Quote Post
askone
post
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Hej

Wydaje mi się, że właściwym rozwiązaniem będzie wykorzystanie tabeli "users" w której powinieneś utworzyć kolumnę "lastactivity" typu [timestamp]. Wtedy w funkcji sprawdzającej czy użytkownik jest zalogowany dodatkowo aktualizowałbyś tę dane w tej kolumnie dla tego użytkownika. Wtedy aby pobrać liczbę bądź nazwy użytkowników aktywnych w czasie ostatnich 5 minut wystarczy dać:

pseudokod:
Kod
SELECT * FROM `users` WHERE `lastactivity` <= NOW() - 5minut


Pozdrawiam
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Pomysł dobry, ale zapytanie nieoptymalne (IMG:style_emoticons/default/smile.gif) Coś takiego jak now() nie powinno być używane bo zmniejsza wydajność. Zapytanie powinno mieć wklejany czas już po stronie php, by baza nie musiała tego liczyć. Poza tym co z userami, którzy wylogowali się w czasie poniżej 5 minut i na bank nie są on-line? Tutaj musi być dodatkowa kolumna oprócz czasu jeszcze. Bo może być timestamp poniżej 5 minut, ale online wskaże 0 czyli wylogowany.
Go to the top of the page
+Quote Post
tomahawk
post
Post #4





Grupa: Zarejestrowani
Postów: 74
Pomógł: 1
Dołączył: 5.02.2007

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


No a co ma wskazywać że zalogowany skoro się wylogował?
Go to the top of the page
+Quote Post
Greg0
post
Post #5





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


Rozwiązanie prymitywne ale działa. Musisz posiadać dodatkowe dwie kolumny tak jak wyżej napisano już lastactive oraz online

  1.  
  2. $timeout = time()-(60*5); //czas 5minut
  3. $wywal_nieaktywnego = mysql_query("UPDATE `users` SET online='0' WHERE lastactive < $timeout"); //ustawia online na 0 osobom nieaktywnym przez 5 minut, nieaktywnym=nieodświeżającym strony
  4. $lastactive = mysql_query("UPDATE `users` SET lastactive='time()' WHERE id='$id'"); //ustawienie czasu przy wywołaniu skryptu
  5.  


I przy wylogowaniu użytkownika też powinieneś ustawić kolumnę online na 0.
Potem aby wyświetlić ludzi będących online pobierasz wszystkich użytkowników mających online=1
Skrypt wiąże się z dużą ilością zapytań.
Poprawiajcie mnie do woli ;]
Pozdrawiam.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.12.2025 - 19:10