datetime + 10 minuten..
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$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());
}
}
?>
$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
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
UPDATE
users
SET
online = 0
WHERE
NOW() < DATE_ADD(online_tijd, 10 MINUTE)
AND
online <> 0
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?
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'
UPDATE users
SET online = 0
WHERE TIMEDIFF(NOW(), online_tijd) > '00:10:00'
Super :D
Thanx
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.
maar zit wel met een probleempje dan(a)
dit is een stukje van mijn ledenlijst..
hoe moet ik dat doen dan :$
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?
$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">';
}
?>
$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">';
}
?>
Gewijzigd op 01/01/1970 01:00:00 door - -
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$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'].'">';
}
?>
$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.
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..
Gewijzigd op 01/01/1970 01:00:00 door - -
Gewijzigd op 01/01/1970 01:00:00 door - -
Maak van de > eens een <. Volgens mij is dat het probleem. De case werkt hier in elk geval uitstekend.
had het verkeerd geplaatst in het script:$