Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Ilość graczy online - najlepszy skrypt
Forum PHP.pl > Forum > Przedszkole
vegeta
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ń.
Mephistofeles
Jakich graczy? Jaka gra? Konkrety!
vegeta
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.
Mephistofeles
Zapisujesz do bazy czas ostatniej akcji użytkownika, pobierasz te w których czas aktualny - czas ostatniej akcji < jakiejś tam wartości. Proste.
vegeta
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.
CuteOne
$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
kristoph3r
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
vegeta
@kristoph3r eee... Dobrze się wyśpij i przeczytaj rano pierwszy post w tym temacie.
poli25
$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);
md1988
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
Mephistofeles
I wszystko to jest opisane już w moim poście.
vegeta
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.
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.