tijd controle en na 5 min na lastActive update database
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 :
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)
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
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
?>
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
Wat doet de ; op regel 19?
WHERE lastActive > lastActive + 200
@SanThe ja dat vermoede ik ook al, echter hoe moet die bereking dan gedaan worden.
ik denk dat daar de fout ook inzit
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.
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.
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
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
Het type VARCHAR is voor tekst. Gebruik DATETIME voor datum en tijd.
nu nog even uitzoeken hoe dat gaat met dat tijdsverschil berekenen.
die begrijp ik nog niet helemaal
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
die begrijp ik nog niet helemaal
Obelix en Idefix op 17/11/2012 13:32:18:
Kijk/zoek naar interval.
0000-00-00 00:00:00
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
Om de juiste tijd in de lastActive te krijgen
Om te status veranderen
Gewijzigd op 17/11/2012 17:39:08 door Ger van Steenderen
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.
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.
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!
SanThe heeft het uitstekend uitgelegd.
nee santhe heeft het idd weer duidelijk uitgelegd en heb ondertussen de fout al opgelost.
zal hem straks even posten..