datetime + 10 minuten..

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

- -

- -

21/11/2006 21:26:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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());
}
}

?>


Please help:)

Mvg Mboshoven
 
PHP hulp

PHP hulp

19/11/2024 02:30:24
 
Frank -

Frank -

21/11/2006 21:33:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
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?
 
Jan Koehoorn

Jan Koehoorn

21/11/2006 21:35:00
Quote Anchor link
Zoiets:

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

- -

21/11/2006 21:42:00
Quote Anchor link
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
 
Frank -

Frank -

21/11/2006 21:48:00
Quote Anchor link
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.
 
- -

- -

21/11/2006 21:53:00
Quote Anchor link
eehm.. dus jij bedoelt dat ik gewoon alleen met online_tijd moet werken..?
 
Frank -

Frank -

21/11/2006 21:58:00
Quote Anchor link
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.
 
- -

- -

21/11/2006 22:00:00
Quote Anchor link
:) 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 :$

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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">';
}

?>
Gewijzigd op 01/01/1970 01:00:00 door - -
 
Frank -

Frank -

21/11/2006 22:09:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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'].'">';
}

?>

Laat de database het werk doen met een CASE. Niet getest! END moet je eventueel in END CASE veranderen.
 
- -

- -

21/11/2006 22:21:00
Quote Anchor link
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..
Gewijzigd op 01/01/1970 01:00:00 door - -
 
- -

- -

21/11/2006 22:52:00
Quote Anchor link
Gelukt!!!:p Frank bedankt:D
Gewijzigd op 01/01/1970 01:00:00 door - -
 
Frank -

Frank -

21/11/2006 23:30:00
Quote Anchor link
Maak van de > eens een <. Volgens mij is dat het probleem. De case werkt hier in elk geval uitstekend.
 
- -

- -

21/11/2006 23:33:00
Quote Anchor link
T werkt al :)
had het verkeerd geplaatst in het script:$
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.