Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki od 1 do 10 z 15

Wątek: [MOD] Poprawny licznik userów online

  1. #1
    Mistrz Joba Awatar Meares
    Dołączył
    Jan 2009
    Posty
    2,630

    Domyślnie [MOD] Poprawny licznik userów online i liczba zarejestrowanych

    Jako, że Smoker nie zrobił poprawnego ska??nika osób online w swoim silniku napiszę udostępnami wam moją modyfikację.

    Zaczynamy!
    1. Otwieray plik header.php znajdujący się w głównym katalogu silnika.
    1.1: Usuwamy następujące linijki:
    Kod php:
    if($online[0] == 1){
        echo 
    'Jest ' $online[0] . ' osoba online';
    }
    else if(
    $online[0] == || $online[0] == || $online == 4){
        echo 
    'Są ' $online[0] . ' osoby online';
    }
    else{
        echo 
    'Jest ' $online[0] . ' osób online';
    }
    echo 
    " / ";
    $zarejestrowani mysql_fetch_array(mysql_query("SELECT count(*) FROM users"));
    echo 
    $zarejestrowani[0];
    echo 
    " zarejestrowanych"
    1.2: W ich miejsce wklejamy:
    Kod php:
    $user $_SESSION['zalogowany'];
    $mojeid mysql_fetch_assoc(mysql_query("SELECT id FROM users WHERE user='$user' "));
    $userid $mojeid['id'];

    $czas_teraz mktime();
    mysql_query("UPDATE users SET last_activ='".$czas_teraz."' WHERE user='".$user."'") or die (mysql_error());
    if (
    $_SESSION['last_activ'] + 60 $czas_teraz) {
        
    $czas_wczesniej $czas_teraz 60;
        
    $q1 mysql_query("SELECT id FROM users WHERE last_activ>='".$czas_wczesniej."'") or die (mysql_error());
        
    $_SESSION['zalogowanych'] = mysql_num_rows($q1);
        
    $_SESSION['last_activ'] = $czas_teraz;
    }

    echo 
    "Zalogowanych: ".$_SESSION['zalogowanych']; 
    2. Usuwamy plik online.php.
    3. Otwieramy plik gora.php.
    3.1: Usuwamy tą linijkę:
    Kod php:
    include('online.php'); 
    3.2: Zastepujemy ją następującym kodem:
    Kod php:
    include("baza.php"); 
    4. W tabeli users w bazie danych tworzymy nową kolumnę o nazwie last_activ, jako typ INT i długość 10.

    To tyle. Skrypt wyświetla userów, którzy dokonali ruchu na stronie (odświerzyli ją) w trakcie ostatniej minuty.

    Jeśli chcecie wyświetlać liczbę zarejsestrowanych zamiast echo "Zalogowanych".$_SESSION['zalogowanych']; z punktu 1.2 wklejcie to:
    Kod php:
    $zarejestrowanych mysql_num_rows(mysql_query("SELECT id FROM users"));
    echo 
    "Zalogowanych: ".$_SESSION['zalogowanych']."<br />Zarejestrowanych: ".$zarejestrowanych
    Skrypt napisany w 99% przeze mnie. Nie wymagam żadnych dupereli w stopkach, ani wzmianki w changelog'u (jeśli prowadzicie), choć nie ukrywam, że było by to miłe z waszej strony.

    Specjalne podziękowania posyłam:
    Karerowi.
    Ostatnio edytowane przez Meares ; 01-06-2009 o 17:48

  2. #2
    Zasłużony Awatar karer
    Dołączył
    Apr 2008
    Posty
    2,554

    Domyślnie

    Proponuje dac jeszcze jedna mala poprawke ktora odciazy baze danych w dosyc znacznym stopniu iloscia zapytan.
    Kod php:
    if ($_SESSION['last_activ']+60<$czas_teraz)
    {
    mysql_query("UPDATE users SET last_activ='".$czas_teraz."' WHERE user='".$user."'") or die (mysql_error()); 
    $czas_wczesniej $czas_teraz 60
    $q1 mysql_query("SELECT id FROM users WHERE last_activ>='".$czas_wczesniej."'") or die (mysql_error()); 
    $zalogowanych mysql_num_rows($q1); 
    echo 
    "Zalogowanych: $zalogowanych";
    $_SESSION['last_activ']=$czas_teraz;

    Teraz updatuje aktywnosci userow co minute i nie czesciej. Niby niewielka zmiana ale niepotrzebne zapytanie pomijamy. No i nie jest to bardzo dokladne ale dokladnosc minutowa chyba starczy. A usprawnienie jest na wypadek gdyby ktos przeladowywal strone czesciej niz raz na minute co zdaza sie czesto moim zdaniem.

    Pisane z palca w minute wiec Meares sprawdz czy dziala i jesli nie to popraw blad

  3. #3
    Mistrz Joba Awatar Meares
    Dołączył
    Jan 2009
    Posty
    2,630

    Domyślnie

    Prawie dobrze. Pod względem kodu świetnie, ale z logicnej części lekko się pomyliłeś. Zapytanie wysyłające czas aktywności gracza musi wykonywać się za każdym razem, ale poza tym wszystko jest OK. Za sekundę naniosę poprawki do pierwszego postu.

    PS. Dostajesz piwo za pomysł.

  4. #4
    Zasłużony Awatar karer
    Dołączył
    Apr 2008
    Posty
    2,554

    Domyślnie

    Zapytanie wysyłające czas aktywności gracza musi wykonywać się za każdym razem
    Do czego musi? Napisalem przeciez ze minutowa dokladnosc. Zapytanie wykonuje sie jedynie gdy nie bylo wykonane takie w ostatniej minucie. Logicznie rzecz ujmujac to nie ma sensu wykonywac zapytanie za kazdym razem skoro dane sa pobierane nie czesciej niz co minute to zapisywac je czesciej niz co minute tez mija sie troche z celem.

    A i jeszcze jedno. SELECT w porownaniu z UPDATE bardzo malo obciaza baze. Dlatego ta poprawka miala sie tyczyc glownie zapytania typu UPDATE.

    PS troche namotalem przedostatnie "zdanie" ale chyba da sie rozczytac.
    Ostatnio edytowane przez karer ; 31-05-2009 o 23:54

  5. #5
    Mistrz Joba Awatar Meares
    Dołączył
    Jan 2009
    Posty
    2,630

    Domyślnie

    Da się rozczytać.

    No może faktyczie tak było by lepiej, ale mi to nie robi różnicy.

  6. #6
    Zarejestrowany
    Dołączył
    May 2009
    Posty
    118

    Domyślnie

    Meares masz PIWO xD

  7. #7
    Zbanowany
    Dołączył
    Oct 2007
    Posty
    1,830

    Domyślnie

    Ja to zrobiłem inaczej :
    online.php
    Kod:
    <?php
    $user = $_SESSION['zalogowany'];
    
    include('baza.php');
    $czas= time();
    $wymagane  = time()-3600;
    // ustawiamy użytkownika na status online 
    $query = "UPDATE users SET online='$czas' WHERE user='$user' ";
        
    if(!$result = mysql_query($query)){
        @mysql_close();
        echo("Problem z poł?cznieniem z baz? danych!");
    }
    $mojeid = mysql_fetch_assoc(mysql_query("SELECT id FROM users WHERE user='$user' "));
    $userid = $mojeid['id'];
    
    //Sprawdzamy ile jest osób online
    $query = "SELECT COUNT(*) FROM users WHERE online > '$wymagane' ";
        
    if(!$result = mysql_query($query)){
        @mysql_close();
        echo("Problem z poł?cznieniem z baz? danych!");
    }
    if(!$online = mysql_fetch_row($result)){
        @mysql_close();
        echo("Problem z poł?cznieniem z baz? danych!");
    }
    ?>

  8. #8
    Mistrz Joba Awatar Meares
    Dołączył
    Jan 2009
    Posty
    2,630

    Domyślnie

    Może mi się wydaje, ale czy ty wyświetlasz liczbę userów aktywnych w ciągu ostatniej godziny (time()-3600)?

  9. #9
    Zasłużony Awatar Kemsan
    Dołączył
    Oct 2007
    Posty
    805

    Domyślnie

    Zamiast :
    Kod php:
    if($online[0] == 1){
        echo 
    'Jest ' $online[0] . ' osoba online';
    }
    else if(
    $online[0] == || $online[0] == || $online == 4){
        echo 
    'Są ' $online[0] . ' osoby online';
    }
    else{
        echo 
    'Jest ' $online[0] . ' osób online';


    Można dać:
    Kod php:
    if($online[0] == 1){
        echo 
    'Jest ' $online[0] . ' osoba online';
    }
    elseif(
    $online[0] >= && $online[0] <= 4){
        echo 
    'Są ' $online[0] . ' osoby online';
    }
    elseif(
    $online[0] > 4){
      echo 
    'Jest ' $online[0] . ' osób online';



  10. #10
    Mistrz Joba Awatar Meares
    Dołączył
    Jan 2009
    Posty
    2,630

    Domyślnie

    Można. Ogólnie rzecz biorąc można z tym zrobi jeszcze kila rzeczy, ale zależy co kto lubi i co kto chce.

Strona 1 z 2 12 OstatniOstatni

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. szukajka userów
    Przez aris w dziale Administracja
    Odpowiedzi: 3
    Ostatni post / autor: 11-06-2010, 13:33
  2. łamanie regulaminu przez userów
    Przez mex w dziale Administracja
    Odpowiedzi: 12
    Ostatni post / autor: 27-04-2010, 06:51
  3. dziwne ? zachowanie userów
    Przez mex w dziale Administracja
    Odpowiedzi: 9
    Ostatni post / autor: 15-02-2010, 14:53
  4. Licznik online
    Przez boosik01 w dziale Budowa gry via www
    Odpowiedzi: 10
    Ostatni post / autor: 29-12-2009, 19:44
  5. Licznik Graczy Online i Zarejestrowanych
    Przez Amoath w dziale Budowa gry via www
    Odpowiedzi: 6
    Ostatni post / autor: 28-02-2008, 06:37

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •