<?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
0

Want wat ik hier probeer te bereiken is door de 2 tijden af te trekken te kijken of het verschil meer is dan 180 seconden zo ja dan is het lid offline is ie binnen die 180 seconden dan is online

Maar hoe zouw ik dit kunnen doen met die tijden?

GR. mebus!
Zie de MySQL-handleiding, hoofdstuk 12.5. En kijk dan eens naar de functie TIMEDIFF(). De database kan uitstekend zelf rekenen.
Ndat je de datums uit de database hebt geterokken zijn het 'strings' geworden..

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 :)
Dit is een mooie query (dus 1 query) om een CASE toe te passen i.c.m. met de TIMEDIFF. Hier een voorbeeldje die je zelf verder mag uitwerken:


SELECT
  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.
Ja het werkt:D

<?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.
Ja oké had al geprobeerd maar lukte niet toen kreeg ik een sql-error:( Ma zal wel weer eens verkeerd hebben aangepast dan zal nog een keertje proberen;)

GR. mebus!
Tip: Noteer je queries wat netter, dat maakt het een stuk overzichtelijker en eenvoudiger. Zie mijn voorbeeld van die case:
<?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());
?>
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.
Het is al gelukt:D

<?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!
En nu met 2 datetime tabellen:p

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!

Reageren