Tijden aftrekken
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
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
<?php
include('config.php');
include('header.php');
$sql = mysql_query("SELECT id,naam,online,laatst_online FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
$br = '<br />';
while($row = mysql_fetch_assoc($sql)) {
$br = ($br == '<br />') ? '' : '<br />';
$on = mysql_query("SELECT CURRENT_TIMESTAMP() AS online") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
echo $wat['online'];
echo '<br />';
echo $row['online'];
echo '<br />';
echo $row['online'] - $wat['online'];
echo ' <center><span>Naam: <a href="'.$website.'profile.php?id='.$row['id'].'">'.stripslashes($row['naam']).'</a> Laatst online: '.$row['laatst_online'].'</span></center>'.$br."\n";
}
include('footer.php');
?>
include('config.php');
include('header.php');
$sql = mysql_query("SELECT id,naam,online,laatst_online FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
$br = '<br />';
while($row = mysql_fetch_assoc($sql)) {
$br = ($br == '<br />') ? '' : '<br />';
$on = mysql_query("SELECT CURRENT_TIMESTAMP() AS online") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
echo $wat['online'];
echo '<br />';
echo $row['online'];
echo '<br />';
echo $row['online'] - $wat['online'];
echo ' <center><span>Naam: <a href="'.$website.'profile.php?id='.$row['id'].'">'.stripslashes($row['naam']).'</a> Laatst online: '.$row['laatst_online'].'</span></center>'.$br."\n";
}
include('footer.php');
?>
Waarom werkt dit niet:
echo $row['online'] - $wat['online'];
want dan komt er 0 te staan:S
dit zijn de 2 andere tijden:
2006-07-25 14:44:52
2006-07-25 14:29:58
Zie de MySQL-handleiding, hoofdstuk 12.5. En kijk dan eens naar de functie TIMEDIFF(). De database kan uitstekend zelf rekenen.
String - string kan neit, dus worden de strings eerst geparsed naar nummerieke waarde, wat TRUE - TRUE opleverd, of te wel 1 - 1
En 1 - 1 = 0 :)
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
CASE
WHEN TIMEDIFF(online, NOW()) > '00:03:00' THEN 'offline'
ELSE 'online'
END
AS status
FROM
tabelnaam
CASE
WHEN TIMEDIFF(online, NOW()) > '00:03:00' THEN 'offline'
ELSE 'online'
END
AS status
FROM
tabelnaam
Niet getest en het lijkt me sterk dat deze helemaal goed is, maar met wat testwerk krijg je hem wel werkend. Je krijgt in elk geval de alias 'status' retour en deze kan de waardes 'offline' en 'online' bevatten.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
include('config.php');
include('header.php');
$sql = mysql_query("SELECT id,naam,online,laatst_online FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
$br = '<br />';
while($row = mysql_fetch_assoc($sql)) {
$br = ($br == '<br />') ? '' : '<br />';
$on = mysql_query("SELECT CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
echo ' <center><span>Naam: <a href="'.$website.'profile.php?id='.$row['id'].'">'.stripslashes($row['naam']).'</a> Laatst online: '.$row['laatst_online'].' Online: '.$wat['status'].'</span></center>'.$br."\n";
}
include('footer.php');
?>
include('config.php');
include('header.php');
$sql = mysql_query("SELECT id,naam,online,laatst_online FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
$br = '<br />';
while($row = mysql_fetch_assoc($sql)) {
$br = ($br == '<br />') ? '' : '<br />';
$on = mysql_query("SELECT CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
echo ' <center><span>Naam: <a href="'.$website.'profile.php?id='.$row['id'].'">'.stripslashes($row['naam']).'</a> Laatst online: '.$row['laatst_online'].' Online: '.$wat['status'].'</span></center>'.$br."\n";
}
include('footer.php');
?>
Maar zouw het nog makkelijker kunnen?
En anders ben ik er nu al zeer blij mee dat dit zo werkt:D
GR. mebus!
Je kunt de controle offline/online direct doen met het ophalen van de gegevens van de gebruikers. Dus met query $sql. Daar moet je de CASE inbouwen en klaar ben je. Scheelt je een hele berg queries die naar de database worden gestuurd, is dus sneller.
GR. mebus!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$query = "
SELECT
CASE
WHEN TIMEDIFF(online, NOW()) > '00:03:00' THEN 'offline'
ELSE 'online'
END
AS status
FROM
tabelnaam
";
$result = mysql_query($query) or die(mysql_error());
?>
$query = "
SELECT
CASE
WHEN TIMEDIFF(online, NOW()) > '00:03:00' THEN 'offline'
ELSE 'online'
END
AS status
FROM
tabelnaam
";
$result = mysql_query($query) or die(mysql_error());
?>
Dus de query in een aparte variabele (kun je hem nog eens echoen), over meerdere regels uitgeschreven, laten inspringen en dan mysql_query() deze variabele laten uitvoeren.
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
include('config.php');
include('header.php');
if(isset($_GET['letter'])) {
$letter = mysql_real_escape_string($_GET['letter']);
$sql = mysql_query("SELECT id,naam,online,laatst_online,CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden leden WHERE geactiveerd = 'ja' AND SUBSTRING(naam,1,1) = '".$letter."'") or trigger_error(mysql_error());
} else {
$sql = mysql_query("SELECT id,naam,online,laatst_online,CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
}
$br = '<br />';
echo ' <center>'."\n";
for ($i="a"; $i != "aa"; $i++) echo ' <a href="list.php?letter='.$i.'">'.$i.'</a>'."\n";
echo ' </center>'."\n";
echo ' <table cellpadding="0" cellspacing="0" align="center">
<tr>
<td width="150">
Naam
</td>
<td width="200">
Laatst online
</td>
<td width="100">
Online
</td>
</tr>'."\n";
while($row = mysql_fetch_assoc($sql)) {
$br = ($br == '<br />') ? '' : '<br />';
$on = mysql_query("SELECT CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
switch($wat['status']) {
case 'ja': $online = '<font color="green"><b>Ja</b></font>'; break;
case 'nee': $online = '<font color="red"><b>Nee</b></font>'; break;
}
echo ' <tr>
<td>
<a href="'.$website.'profile.php?id='.$row['id'].'">'.stripslashes($row['naam']).'</a>
</td>
<td>
'.$row['laatst_online'].'
</td>
<td>
'.$online.'
</td>
</tr>'."\n";
}
echo ' </table>'."\n";
include('footer.php');
?>
include('config.php');
include('header.php');
if(isset($_GET['letter'])) {
$letter = mysql_real_escape_string($_GET['letter']);
$sql = mysql_query("SELECT id,naam,online,laatst_online,CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden leden WHERE geactiveerd = 'ja' AND SUBSTRING(naam,1,1) = '".$letter."'") or trigger_error(mysql_error());
} else {
$sql = mysql_query("SELECT id,naam,online,laatst_online,CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
}
$br = '<br />';
echo ' <center>'."\n";
for ($i="a"; $i != "aa"; $i++) echo ' <a href="list.php?letter='.$i.'">'.$i.'</a>'."\n";
echo ' </center>'."\n";
echo ' <table cellpadding="0" cellspacing="0" align="center">
<tr>
<td width="150">
Naam
</td>
<td width="200">
Laatst online
</td>
<td width="100">
Online
</td>
</tr>'."\n";
while($row = mysql_fetch_assoc($sql)) {
$br = ($br == '<br />') ? '' : '<br />';
$on = mysql_query("SELECT CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
switch($wat['status']) {
case 'ja': $online = '<font color="green"><b>Ja</b></font>'; break;
case 'nee': $online = '<font color="red"><b>Nee</b></font>'; break;
}
echo ' <tr>
<td>
<a href="'.$website.'profile.php?id='.$row['id'].'">'.stripslashes($row['naam']).'</a>
</td>
<td>
'.$row['laatst_online'].'
</td>
<td>
'.$online.'
</td>
</tr>'."\n";
}
echo ' </table>'."\n";
include('footer.php');
?>
Zo nu ken ik weer verder:)
Hartelijk bedankt Frank!:D
GR. mebus!
Ik heb nu ook nog een tabel: dia_online datetime
Maar nu wil dat als de 2 tijdverschillen tussen now en dia_online ook word vertoont als online is ja of nee
het verschil mag niet groter zijn dan 5 seconden hoe zou ik deze er dan bij kunnen proppen?
want 2 keer dit:
CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status
CASE WHEN TIMEDIFF(now(), dia_online) > '00:00:02' THEN 'nee' ELSE 'ja' END AS d_status
Werkt niet in een mysql query:(
Weet iemand hiervoor een briljante oplossing?(A)
GR. mebus!