Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Ilość graczy online - najlepszy skrypt
vegeta
post
Post #1





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Witam.

W tym temacie chcę, żebyście podali mi kilka sposobów sprawdzania ile graczy jest online w danej chwili. Oczywiście MySQL i jak najmniej zapytań.

Ten post edytował vegeta 28.11.2010, 22:38:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Mephistofeles
post
Post #2





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Jakich graczy? Jaka gra? Konkrety!
Go to the top of the page
+Quote Post
vegeta
post
Post #3





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Ludzie (gracze) logują się. Przy logowaniu jednego podnosi się licznik graczy online o 1. Przy wylogowaniu jednego -1. Przy wygaśnięciu sesji -1. Chodzi mi o najbardziej optymalny skrypt, bo tutaj możliwości jest dużo.
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #4





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


Zapisujesz do bazy czas ostatniej akcji użytkownika, pobierasz te w których czas aktualny - czas ostatniej akcji < jakiejś tam wartości. Proste.
Go to the top of the page
+Quote Post
vegeta
post
Post #5





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


Też tak można, ale można też zrobić zapytanie update w polu active, które daje 1 przy zalogowaniu i 0 przy autowylogowaniu i wylogowaniu normalnym. Jest to lepsze metoda niż porównywanie dwóch wartości.

Czekam na inne propozycje.
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


$select = mysql_query("SELECT count(*) FROM users WHERE loged = 1 and last_action > ".(time() - 360));

przy akcji

mysql_query("UPDATE users SET last_action = ".time()." WHERE login = '{$login}'");

lub cachowanie co określony czas stanu aktualnego użytkowników

Ten post edytował CuteOne 28.11.2010, 23:38:44
Go to the top of the page
+Quote Post
kristoph3r
post
Post #7





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 15.11.2010

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


Bez MySQL się nie obędzie ale postaram się przybliżyć Ci i nawinąć szybko temat, a wiec tak tworzysz plik config.php
  1. <?php
  2. mysql_connect('ip','urzytkownik','hasło') or die(mysql_error());
  3.  
  4.  
  5. ?>
gdzie :
ip - to ip twojego servera
urzytkownik -to nazwa urzytkownika bazy danych
hasło -to hasło do bazy danych
baza -to nazwa bazy danych MySQL

Następnie tworzysz plik online.php
  1. <?php
  2.  
  3. require ('config.php');
  4.  
  5. $query = ("SELECT online FROM characters WHERE online=1");
  6.  
  7. $suma = mysql_query($query) or die(mysql_error());
  8.  
  9. $online=mysql_numrows($suma);
  10.  
  11. echo "Liczba Online: <font color='#00FF00'>$online</font>" ?>


oczywiście linia
  1. $query = ("SELECT online FROM characters WHERE online=1");

Może się różnić
online -jest to nazwa kolumny z której będą wyciągane wartości =1(online=1)
characters -jest to nazwa tabeli z której będą wyciągane dane

powodzenia smile.gif


--------------------
www.l2teonpvp.pl
Go to the top of the page
+Quote Post
vegeta
post
Post #8





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


@kristoph3r eee... Dobrze się wyśpij i przeczytaj rano pierwszy post w tym temacie.
Go to the top of the page
+Quote Post
poli25
post
Post #9





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


$nb_connected_connexion=300; // 5 minutes
$time_connected=date("U");
$ip_connected=$_SERVER['REMOTE_ADDR'];
$query_connected=pg_query("select * from nb_connected where ip='$ip_connected'");

$nb_connected=pg_num_rows($query_connected);

if ($nb_connected==0)
{
$query_connected=pg_query("insert into nb_connected values ('$ip_connected' ,'$time_connected')");
$result_connected=pg_affected_rows($query_connected);
//echo $result_connected;

}

else
{
$query_connected=pg_query("update nb_connected set time='$time_connected' where ip='$ip_connected'");
}

$time_max_connected=$time_connected-$nb_connected_connexion;
$query_connected=pg_query("delete from nb_connected where time<'$time_max_connected'");

$query_connected=pg_query("select * from nb_connected");

$visitors=pg_num_rows($query_connected);
Go to the top of the page
+Quote Post
md1988
post
Post #10





Grupa: Zarejestrowani
Postów: 19
Pomógł: 1
Dołączył: 27.11.2010

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


Załóżmy, że mamy tabele Users o polach:
-id
-name
-password
-lastActive - czas ostatniej akcji w formie Unix Time Stamp



Wtedy:
  1. SELECT COUNT(id) AS Result FROM Users WHERE (lastActive+300)<UNIX_TIMESTAMP() LIMIT 1
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #11





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

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


I wszystko to jest opisane już w moim poście.
Go to the top of the page
+Quote Post
vegeta
post
Post #12





Grupa: Zarejestrowani
Postów: 122
Pomógł: 0
Dołączył: 9.11.2008

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


A czy wszyscy korzystają z przycisku wyloguj? Nie. I dlatego wybrałem przykład CuteOne.

Gdy logujesz się to robię update, w którym active=1 i last_action = time(). Wylogowanie robi to samo, tylko, że active zamienia na 0.

Zliczanie ilości graczy online: liczę active gdzie active jest rowne 1 i last action jest większe od time() - 900.

Automatyczne wylogowanie: wykonuje zapytanie select last_action gdzie ID jest rowne ID aktualnego gracza. Jeśli last_action jest mniejsze od time() - 900 to wywołuje zapytanie update, które zamienia active na 0 i last action na time, niszczę sesje winksmiley.jpg

Jeśli ktoś ma jakieś zastrzeżenia to jestem otwarty na uwagi.
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: 21.08.2025 - 09:12