tijd controle en na 5 min na lastActive update database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Danny A-noniem

Danny A-noniem

17/11/2012 13:07:29
Quote Anchor link
Hallo

ik zit met een probleem.
nu zal het wel weer geheel fout zijn, maar dit is de bedoeling.

ik heb een tabelgebruikers met kolom lastActive.
hierin heb ik een tijdstempel neergezet door middel van :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$time
= time() - $timestamp;
?>

nu wil ik onderstaande gebruiken om de database door te lopen, en gebruikers die langer dan bv 5 minuten niet actief zijn geweest, het kolom online word geupdate naar "nee ".

dit alles werkt tot nog toe wel goed.
echter wanneer ik dit script automatisch laat lopen (refresch van pagina) lijkt die niets verder te doen.
ook de status word niet veranderd..
dit is het..
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
SESSION_START();



TIJDSTEMPEL****************************************************************************************
$time = time() - $timestamp;
$time2=$time-60;
//DEFINEER DATABASE GEGEVENS**********************************************************************************
include 'dbcon.php';
mysql_select_db("gebruiker", $con);
 $naam = mysql_query("SELECT * FROM gebruiker WHERE online = 'ja'");
    while ($row = mysql_fetch_assoc($naam))
    {

//DEFINEER VARIABLEN *****************************************************************************************
         $starttijd = $row['lastActive'];
$online = $row['online'];

    
echo $starttijd.'<br>';
echo $time.'<br>';
echo $time2.'<br>';
echo $online.'<br>';

// update online na offline

mysql_select_db("gebruiker", $con);
 
mysql_query("UPDATE gebruiker SET online='nee' WHERE lastActive > lastActive + 200");
 


 }

 //  stop loop
 


?>


ik hoop dat het duidelijk is.
voor beveiliging ..
dit staat lokaal en behoeft geen beveiliging.

Toevoeging op 17/11/2012 13:08:04:

oja hierin probeerde ik het met 20 sec...
Gewijzigd op 17/11/2012 13:31:15 door Danny A-noniem
 
PHP hulp

PHP hulp

24/11/2024 14:10:24
 
Nick Dijkstra

Nick Dijkstra

17/11/2012 13:19:12
Quote Anchor link
Wat doet de ; op regel 19?
 
- SanThe -

- SanThe -

17/11/2012 13:28:46
Quote Anchor link
Dit is onmogelijk:
WHERE lastActive > lastActive + 200
 
Danny A-noniem

Danny A-noniem

17/11/2012 13:29:46
Quote Anchor link
ja regel 19 hoort daar niet, verwijderd..
@SanThe ja dat vermoede ik ook al, echter hoe moet die bereking dan gedaan worden.
ik denk dat daar de fout ook inzit
 
Obelix Idefix

Obelix Idefix

17/11/2012 13:32:18
Quote Anchor link
Ook al draait het lokaal:
Waarom * en niet het veld/de velden noemen?
Waarom variabelen aanmaken regel 17+18?
Variabele regel 16 gebruik je niet?
Error-reporting en foutafhandeling ontbreekt.
En gaan debuggen (echo bv query).
Dan had je vermoedelijk al wel wat gevonden/gezien (zie SanThe)
Kijk/zoek naar interval.
 
- SanThe -

- SanThe -

17/11/2012 13:33:28
Quote Anchor link
Ik neem aan dat lastActive een datum/tijd bevat. Tel daar dan 5 minuten bij op en als dat groter is dan NOW() dan is men niet meer online.
 
Danny A-noniem

Danny A-noniem

17/11/2012 14:15:17
Quote Anchor link
oke, maar hoe omschrijf ik dat dan? dat is juist het probleem wat ik niet voor elkaar krijg.
regel 17 is voor mezelf even om te kijken of de online offline status te bekijken.

lastActive is een kolom met een tijdstempel, gemaakt met
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$time
= time() - $timestamp;
?>

zo ziet deze kolom eruit:

veld = lastActive
type = varchart
lengte/waardes = 255
collatie = latin_sweidisch_ci
Attributen = leeg
null = null
standaarwaarde = null
extra = leeg
lastActive

ik selecteer alles met * omdat ik later ook nog andere rijen nodig heb.
Gewijzigd op 17/11/2012 14:23:37 door Danny A-noniem
 
- SanThe -

- SanThe -

17/11/2012 14:27:54
Quote Anchor link
Het type VARCHAR is voor tekst. Gebruik DATETIME voor datum en tijd.
 
Danny A-noniem

Danny A-noniem

17/11/2012 14:34:44
Quote Anchor link
oke aangepast, tnx.
nu nog even uitzoeken hoe dat gaat met dat tijdsverschil berekenen.
die begrijp ik nog niet helemaal
 
Obelix Idefix

Obelix Idefix

17/11/2012 14:38:40
Quote Anchor link
Danny A-noniem op 17/11/2012 14:34:44:
nu nog even uitzoeken hoe dat gaat met dat tijdsverschil berekenen.
die begrijp ik nog niet helemaal


Obelix en Idefix op 17/11/2012 13:32:18:
Kijk/zoek naar interval.
 
Danny A-noniem

Danny A-noniem

17/11/2012 14:55:27
Quote Anchor link
nu ik de kolom naar datetime heb verzet, heb ik geen tijdsstempel meer in de database...
0000-00-00 00:00:00
 

17/11/2012 16:51:31
Quote Anchor link
tim() = is een integer en dus zou je datetime ook een integer moeten zijn, verander hem dus in int of reken in datetime om naar een integer

Toevoeging op 17/11/2012 16:51:45:

tim() = is een integer en dus zou je datetime ook een integer moeten zijn, verander hem dus in int of reken in datetime om naar een integer

Toevoeging op 17/11/2012 16:58:04:

$sql = 'SELECT gebruiker WHERE lastActive + 300 < ' . time()

Geeft je dan de gebruikers die nog aktief zijn geweest de laatste 5 minuten
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/11/2012 17:37:28
Quote Anchor link
Dat denk ik niet.
Om de juiste tijd in de lastActive te krijgen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE gebruiker SET lastActive = NOW()

Om te status veranderen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
UPDATE gebruiker SET online = 'nee' WHERE NOW() - INTERVAL 5 MINUTE > lastActive
Gewijzigd op 17/11/2012 17:39:08 door Ger van Steenderen
 

17/11/2012 19:48:41
Quote Anchor link
Tjee nu heb ik het al drie keer getypt zeg. Wat is hier aan de hand?
Druk je op reageren is de post leeg.

Afijn nog een keer.


De ts gebruikt de functie time() en die retourneert een integer, daarnaast wilt hij er mee rekeken. Daar is ook mijn oplossing op gebaseerd. Dat werkt perfect want een hele hoop forums werken zo.

Nu zeggen jullie maak er een datum veld van, waarvoor, dat is toch helemaal niet nodig.
Daarnaast zeg je eerst een de tijd updaten en daatna online updaten. Dat zijn twee queries draaien waarvan je het antwoord eigenlijk al weet. Dat is er eentje teveel.

De ts'er wilde toch weten wie online is, nu zoek dan de gebruikers die 5 minuten geleden nog actief waren en publiceer die in een while loop. Een query verdient en geen extra updateslag voor het zelfde resultaat.
 
- SanThe -

- SanThe -

17/11/2012 20:09:15
Quote Anchor link
De eerste query van Ger gebruik je als de bezoeker iets doet op de site, dus actief is. De tweede query gebruik je om te kijken wie er nog actief zijn. Ze staan dus compleet los van elkaar.
 

17/11/2012 20:39:44
Quote Anchor link
Tjee weer een lege post!! Het begint echt irriterend te worden.

Dat begrijp ik, is in mijn geval ook zo.
Maar ik hoef niet eerst een veld te updaten om daarna diezelfde gebruikers te selecteren om ze zichtbaar te maken.

En dat is een query minder!
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

17/11/2012 20:45:30
Quote Anchor link
Ik denk dat de clue (en de vraagstelling van Danny) niet helemaal ziet.
SanThe heeft het uitstekend uitgelegd.
 
Danny A-noniem

Danny A-noniem

17/11/2012 20:48:11
Quote Anchor link
hey ja wow ...

nee santhe heeft het idd weer duidelijk uitgelegd en heb ondertussen de fout al opgelost.
zal hem straks even posten..
 



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.