Ik heb een scriptje dat als je inlogt dan word in de database online op 1 gezet en online_tijd op de tijd dat je inlogd..

In config heb ik dat iedere klik die online_tijd bijgewerkt wordt als je ingelogd bent..

nu wil ik een scriptje maken dat als je 10 minuten niet geklikt heb (of van de site bent gegaan zonder uit te loggen) online op 0 gezet word..

Dit heb ik maar volgens mij gaat het fout bij $ontime:

<?
$dbres = mysql_query("SELECT * FROM `users`");

while($rij = mysql_fetch_assoc($dbres))
{

$now = date('Y-m-d H:i');
$time = $rij['online_tijd'];
$ontime = $rij['online_tijd']+300;
$online = $now-$time;

if($online < 300){
mysql_query("UPDATE users set online=0 where `online_tijd` < $ontime") or die(mysql_error());
}
}
?>

Please help:)

Mvg Mboshoven

UPDATE 
  users 
SET 
  online = 0
WHERE 
 NOW() < DATE_ADD(online_tijd, 10 MINUTE) 
AND 
  online <> 0

Niet getest... Maar zoals je kunt zien hoef je niet in PHP met de tijd te gaan rekenen, laat de database het rekenwerk voor je uitzoeken.

Vraagje: Op welke manier wil je deze query gaan aanroepen? Wie start deze query?
Zoiets:

UPDATE users
SET online = 0
WHERE TIMEDIFF(NOW(), online_tijd) > '00:10:00'
Jan Koehoorn schreef op 21.11.2006 21:35
Zoiets:

UPDATE users
SET online = 0
WHERE TIMEDIFF(NOW(), online_tijd) > '00:10:00'


Super :D
Thanx
Waarom wil je eigenlijk iedere minuut (dat is de enige manier om altijd up-to-date te blijven) een update-query uitvoeren? Wanneer je gewoon die gebruikers selecteert die de afgelopen 10 minuten iets hebben uitgevoerd, dan zullen de queries een stuk sneller zijn.

Een gebruiker klikt ergens op de site => update van 1 record waarbij je een nieuwe datumtijd-stempel opgeeft
Ophalen van een pagina => select alle gebruikers die de afgelopen 10 minuten een update hebben uitgevoerd.

Het is nu niet meer nodig om ergens een waarde op 1 of 0 te zetten. Gewoon een datumtijdstempel bijwerken bij iedere klik (doe je toch al) en een SELECT uitvoeren met de juiste WHERE. Dit bespaart je een hoop overhead.
eehm.. dus jij bedoelt dat ik gewoon alleen met online_tijd moet werken..?
Precies! De waarde in 'online' is namelijk een afgeleide van de tijd, de tijd bepaalt of je offline of online bent. Het heeft dan geen toegevoegde waarde om dit gegeven nog een keer op te gaan slaan. Sterker nog, in een goed datamodel sla je gegevens slechts 1x op, jij slaat het nu 2x op.
:) bedankt groot gelijk had het zelf niet gezien:p

maar zit wel met een probleempje dan(a)

dit is een stukje van mijn ledenlijst..
hoe moet ik dat doen dan :$

<?
$sql = mysql_query("SELECT * FROM users ORDER BY gebruikersnaam") or die (mysql_error());

while($rij = mysql_fetch_assoc($sql))
{

if($rij['online'] == '1'){
$online = '<img src="images/online.gif" border="0" alt="Online">';
}else{
$online = '<img src="images/offline.gif" border="0" alt="Offline">';
}
?>
<?
$query = "
SELECT
*,
CASE
WHEN TIMEDIFF(NOW(), online_tijd) > '00:10:00' THEN 'online'
ELSE 'offline'
END AS online
FROM
users
ORDER BY
gebruikersnaam";
$sql = mysql_query($query) or die (mysql_error());

while($rij = mysql_fetch_assoc($sql))
{
$online = '<img src="images/'.$rij['online'].'.gif" border="0" alt="'.$rij['online'].'">';
}
?>
Laat de database het werk doen met een CASE. Niet getest! END moet je eventueel in END CASE veranderen.
hhmmm..
hij geeft nu online aan maar de online_tijd staat op 2006-11-21 21:54:51
en het is bij mij 22:19

Edit:
Als mboshoven(dat is mijn account) op online gaat dan klopt het wel maar dan gaat F-Flow ook op online en dat klopt niet die moet dan offline blijven want die datum is niet veranderd..
Gelukt!!!:p Frank bedankt:D

Reageren