login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Online leden - hoe het best?

Offline BigBug - 19/11/2008 18:53
Avatar van BigBugPHP expert Beste heren (en dames?),

Ik ben van plan voor het forum, dat ik aan het bouwen ben een 'online leden systeem(pje)' te maken. Ik zat te denken om dit als volgt te doen: een extra rij in mijn 'users' tabel die constant als een pagina refresht de time(); erin te klappen. Vervolgens loop je dan je user tabel af en checkt het verschil tussen de time(); in de database en time(); op dat moment. En dan alles met een difference <= 300 seconden = online.

Dit lijkt mij de makkelijkste en beste weg, is dit ook zo?

En zoja, kan ik dit in een query bouwen in de trant van:

SELECT id, username FROM users WHERE time <= time()-600

Ik weet dat het bovenstaande op deze manier absoluut niet kan, maar is er een manier?

Bij voorbaat mijn diepste dank 

10 antwoorden

Gesponsorde links
Offline Richard - 19/11/2008 19:03
Avatar van Richard Crew algemeen Je zet sowieso geen time() in een tabel. Het zou _in principe_ kunnen met een last_refresh DATETIME kolom, waarbij je dan kunt kijken of last_refesh + INTERVAL 5 MINUTE > NOW().
Offline bl00d0script - 19/11/2008 19:03
Avatar van bl00d0script Onbekend die van jou die moet zeker kunnen
Offline BigBug - 19/11/2008 19:09
Avatar van BigBug PHP expert
Citaat:
Je zet sowieso geen time() in een tabel. Het zou _in principe_ kunnen met een last_refresh DATETIME kolom, waarbij je dan kunt kijken of last_refesh + INTERVAL 5 MINUTE > NOW().


Dit klinkt opzich best goed  

Ik neem aan dus dat ik een extra rij moet aanmaken met DATETIME?

Maar wat moet je daarin wegschrijven, een date(); ?
Ik zie het zo nog niet helemaal voor me, ondanks enig geg00gle... Kun je misschien een klein voorbeeldje typen wat me iets op weg helpt? 
Offline nielsvdwal - 19/11/2008 20:58 (laatste wijziging 19/11/2008 20:58)
Avatar van nielsvdwal PHP gevorderde dat van jou zou ook zeker prima werken!

  1. <? $onlinetijd = time()-300;
  2. mysql_query("SELECT id, username FROM users WHERE time > ".$onlinetijd."");
  3. ?>

Offline Rens - 19/11/2008 21:00
Avatar van Rens Gouden medaille

Crew algemeen
In je veldje van het type DATETIME kun je de datum simpel invoegen d.m.v. de MySQL functie 'NOW()'.

http://www.site...SQL_deel_1
http://www.site...:_Functies
2 mooie tutorials van Marten over datum en tijd in MySQL :-)
Offline Richard - 19/11/2008 21:58
Avatar van Richard Crew algemeen Jup, met now(). Wat overigens beter zou zijn is een aparte 'online'-tabel, waarin je per user bijhoudt of diegene online is, zo kun je mits je dit wilt ook bijhouden hoelang gasten online zijn. Maar wil je dit niet, volstaat een last_refresh DATETIME kolom. 
Offline Dubz - 19/11/2008 22:33 (laatste wijziging 19/11/2008 23:16)
Avatar van Dubz Nieuw lid best met now() ja. mss kan je hier wat mee

  1. $username = //je gebruikersnaam
  2. $now = date("Y-m-d H:i:s");
  3. mysql_query("UPDATE `users` SET `online`='$now' WHERE `username`='$username'") or die (Mysql_Error());
  4. bij het inloggen schijft hij de tijd in de database.
  5.  
  6.  
  7. $online = mysql_query("SELECT * FROM `users`");
  8. while($row = mysql_fetch_array($online)){
  9. $username = $row["Username"];
  10. $online = $row["online"];
  11. $now = date("Y-m-d H:i:s");
  12. $time = (strtotime($now)-strtotime($online));
  13. if($time < 300){
  14. echo("$username");
  15. }
  16. }


dan leest hij de tijd van de database en de tijd van nu dus
en hij vergelijkt die=> online/offline

Citaat:
Rens edit:
Codetags gebruiken!
Offline vinTage - 19/11/2008 23:35 (laatste wijziging 19/11/2008 23:36)
Avatar van vinTage Nieuw lid
Dubz schreef:
best met now() ja. mss kan je hier wat mee
$now = date("Y-m-d H:i:s");


$now = 'blaaaaaat';

Met andere woorden, je php oplossing wil ik nog slikken, maar die best met now() ja getuigd van blaat 
Offline Richard - 19/11/2008 23:57
Avatar van Richard Crew algemeen Nee Dubz, daar kun je niks mee. Filteren van data kun je beter in de database doen, dat is nou eenmaal sneller. Als je dan ook nog het juiste datatype gebruikt (lees, een datum- en tijdveld) kun je er ook nog eens veel beter mee rekenen, en zit je gebakken. En inserten doe je _altijd_ met NOW(), niet met een PHP-functie.
Offline BigBug - 20/11/2008 16:23
Avatar van BigBug PHP expert Ik ga zometeen eerst maar eens wat proberen voordat ik begin met implementeren Ik houd jullie op de hoogte (a)

Onee, misschien laat op de avond, zo uit eten met oma 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.204s