verschil in tijd berekenen...
ik heb een script dat van elke gebruiker de laatste activiteit opslaat..
als een gebruiker de browser afsluit blijft deze op ingelogd staan..
maar als een andere gebruiker of bezoeker een actie uitvoert,
wordt er ALTIJD meteen gecheckt of er toevallig een gebruiker online is,
die al 30 minuten of langer geen activiteit heeft gehad..
ik heb nu de laatste_activiteit in de database bij één user op
2011-06-13 19:05:29 gezet..
nu moet er gekeken worden of dat verschil met de tijd van nu meer dan 30 minuten is.. maar hoe?
ik heb al een aantal manieren geprobeerd, maar zonder succes..
dit heb ik nu:
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
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
<?php
function check_activity() {
include('db_connection.php');
//alle lidnummers en laatste activiteiten opvragen van leden
//die op ingelogd staan, en een laatste_activiteit hebben
$query = mysql_query("SELECT lidnummer, laatste_activiteit
FROM lid
WHERE ingelogd = '1'
AND laatste_activiteit != 'NULL'");
for ($i = 1; $i <= mysql_num_rows($query); $i++) {
$row = mysql_fetch_assoc($query);
//laatste activiteit
$last_activity = $row['laatste_activiteit'];
//lidnummer
$lidnummer = $row['lidnummer'];
//datum + tijd van dit moment
$datetime = date("Y-m-d H:i:s");
//hier moet ik het verschil uitrekenen
$verschil = "HELP?";
if ($verschil >= 30) {
$query2 = mysql_query("Update lid
SET ingelogd = '0'
where lidnummer = " . $lidnummer);
}
}
}
?>
function check_activity() {
include('db_connection.php');
//alle lidnummers en laatste activiteiten opvragen van leden
//die op ingelogd staan, en een laatste_activiteit hebben
$query = mysql_query("SELECT lidnummer, laatste_activiteit
FROM lid
WHERE ingelogd = '1'
AND laatste_activiteit != 'NULL'");
for ($i = 1; $i <= mysql_num_rows($query); $i++) {
$row = mysql_fetch_assoc($query);
//laatste activiteit
$last_activity = $row['laatste_activiteit'];
//lidnummer
$lidnummer = $row['lidnummer'];
//datum + tijd van dit moment
$datetime = date("Y-m-d H:i:s");
//hier moet ik het verschil uitrekenen
$verschil = "HELP?";
if ($verschil >= 30) {
$query2 = mysql_query("Update lid
SET ingelogd = '0'
where lidnummer = " . $lidnummer);
}
}
}
?>
Gewijzigd op 13/06/2011 20:27:19 door Jason van der Zeeuw
Gewoon 1 query.
UPDATE lid SET ingelogd = '0' WHERE DATE_ADD(laatste_activiteit, INTERVAL 30 MINUTE) < NOW()
Ik hoop dat ie helemaal correct is, maar ik heb niks getest.
dit heb ik nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function check_activity() {
include('db_connection.php');
//alle lidnummers en laatste activiteiten opvragen van leden
//die op ingelogd staan, en een laatste_activiteit hebben
$query = mysql_query("SELECT lidnummer
FROM lid
WHERE ingelogd = '1'
AND DATE_ADD(laatste_activiteit, INTERVAL 30 MINUTE) < NOW()");
for ($i = 1; $i <= mysql_num_rows($query); $i++) {
$row = mysql_fetch_assoc($query);
//lidnummer
$lidnummer = $row['lidnummer'];
$query2 = mysql_query("Update lid
SET ingelogd = '0'
where lidnummer = " . $lidnummer);
}
}
?>
function check_activity() {
include('db_connection.php');
//alle lidnummers en laatste activiteiten opvragen van leden
//die op ingelogd staan, en een laatste_activiteit hebben
$query = mysql_query("SELECT lidnummer
FROM lid
WHERE ingelogd = '1'
AND DATE_ADD(laatste_activiteit, INTERVAL 30 MINUTE) < NOW()");
for ($i = 1; $i <= mysql_num_rows($query); $i++) {
$row = mysql_fetch_assoc($query);
//lidnummer
$lidnummer = $row['lidnummer'];
$query2 = mysql_query("Update lid
SET ingelogd = '0'
where lidnummer = " . $lidnummer);
}
}
?>
en het werkt perfect!
hartstikke bedankt alweer!
alweer wat geleerd :)
phphulp zou eigenlijk een feedback functie moeten hebben haha ;)
Edit: Stel er zijn 10 mensen niet actief meer, dan kost dat met jouw script 11 query's en met mijn oplossing gewoon nog steeds 1 query.
Gewijzigd op 13/06/2011 21:06:52 door - SanThe -
geniaal! haha dat ik dat niet door had!
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
function check_activity() {
include('db_connection.php');
mysql_query("Update lid
SET ingelogd = '0'
WHERE ingelogd = '1'
AND DATE_ADD(laatste_activiteit, INTERVAL 30 MINUTE) < NOW()");
}
?>
function check_activity() {
include('db_connection.php');
mysql_query("Update lid
SET ingelogd = '0'
WHERE ingelogd = '1'
AND DATE_ADD(laatste_activiteit, INTERVAL 30 MINUTE) < NOW()");
}
?>
mijn functie is nu behoorlijk overzichtelijk geworden :)!
danku nogmaals!
Gewijzigd op 13/06/2011 21:11:46 door Jason van der Zeeuw
Jason van der Zeeuw op 13/06/2011 21:09:10:
mijn functie is nu behoorlijk overzichtelijk geworden :)!
En zo hoort het. ;-)