Leden online

  • Beste,


    Hoe kan ik het beste een leden online script maken?
    Dus dat als je inlogd, en ingelogd bent in de database word gezet dat je online bent, en als je uitlogd dat er staat dat je niet meer online bent.


    Hoe doe ik dit het beste in PHP5, en natuurlijk zonder bugs?


    Ik hoop dat iemand een snippet heeft,


    Lars

  • Houd je al bij in je database, dat als iemand een pagina oproept, dat er dan een veld word bijgewerkt in de database?


    Hier een stukje van FBIwars.nl:


    PHP
    $tijd = time() - (_MINUTENONLINE * 60);
    $resultaat=mysql_query("SELECT id, name, level, contant, laatstonline, bank, power FROM `users` WHERE `laatstonline` >= '" . $tijd . "' ORDER BY `id` DESC LIMIT 20") or die(mysql_error());


    De constante MINUTENONLINE staat bij mij op 30, dus 1800 seconden in het verleden. Kolom laatstonline word continu bijgewerkt als de gebruiker is ingelogd, bij elke pagina word de huidige unix timestamp weggeschreven.


    Als je uitgelogd bent, zou je een extra kolomnaam erin kunnen zetten. Bijvoorbeeld "status" of "online". Bij het uitloggen zet je die op 0, wat dus offline is, en bij het inloggen weer op 1.
    In de query doe je dan zoiets als dit:


    PHP
    $tijd = time() - (_MINUTENONLINE * 60);
    $resultaat=mysql_query("SELECT id, name, level, contant, laatstonline, bank, power FROM `users` WHERE `laatstonline` >= '" . $tijd . "' AND `online` = '1' ORDER BY `id` DESC LIMIT 20") or die(mysql_error());


    Hoop dat je hiermee iets verder komt ;)

  • @Lars dan kan je bijvoorbeeld $_SESSION['aanwezig'] aanmaken, en tijdens het uitloggen unsetten, of op 0 zetten. Op de manier hoe jij zei - wegklikken - kan je vrij weinig iets aan doen. Of elke 10 seconden een ajax-request naar een bestand doen die de status bijhoudt, en dus in de database (of sessie) de timestamp toevoegd. Als het langer dan 10 seconden geleden is, dan is het venster dus waarschijnlijk gesloten en dus iemand offline. Alleen om ethische redenen raad ik je af om dit te doen, niet iedereen vind het leuk dat zoiets gebeurd, en het zorgt voor meer load ;)

  • Je moet gewoon de laatste activiteit pakken bijvoorbeeld dit:
    Alle gebruikers die in de laatste 5 minuten online waren. Dan maak je gewoon een veld aan met de naam last_activity aan en die update je gewoon met time() als de gebruiker naar een andere pagina gaat.


    Dan via de SQL even een time() - 5 minuten en je hebt het.

  • PHP
    // De update van de tijd
    // Gooi dit in je config of menuleft
    mysql_query("UPDATE `***` SET `lastclick`=".time()." WHERE `id`=".$userid) or die(mysql_error());
    
    
    //Ophalen van alle gebruikers die de laatste 5 min geklikt hebben
    $sql = mysql_query("SELECT * FROM users WHERE `users`.`lastclick`>".(time() - 300)." ORDER BY `username` ASC") or die(mysql_error());


    aub ;)

    Hosting Network Services. Special Firewalled hosting for crime games.
    ******
    Msn:** Stuur maar PM.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!