Forum » Server-Side scripting » Leden online
Rapifia Europe
Berichten: 3719
avatar
Offline Stuur privebericht
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
04-06-2010 09:32
Dit topic is 199 keer bekeken door 49 verschillende leden
Reacties op: "Leden online"
1
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privébericht
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:

Code | Selecteer Alles
minimaliseren
1
2
$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:

Code | Selecteer Alles
minimaliseren
1
2
$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
04-06-2010 09:53
Rapifia Europe
Berichten: 3719
avatar
Offline Stuur privébericht
Dankjewel

Maarre, ik werk met sessions.
En als je dan bijv. wegklikt dus niet zelf uitlogd, dan staat er dus nog "online".
Je kan dus niet de offline status invoegen

Lars
04-06-2010 17:09
Berichten: 849
avatar
Offline Stuur privébericht
Blijven de sessions niet dan als je wegklikt? bij mij wel...
04-06-2010 17:13
nyan nyan nyan nyan
Berichten: 2076
avatar
Offline Stuur privébericht
@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
04-06-2010 17:18
-1
Berichten: 1489
avatar
Offline Stuur privébericht
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.
04-06-2010 19:01
Berichten: 491
avatar
Offline Stuur privébericht
Code | Selecteer Alles
minimaliseren
1
2
3
4
5
6
// 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
04-06-2010 21:34
Reageer op: "Leden online"
1
Je kan niet reageren omdat je niet bent ingelogd. Inloggen of Aanmelden