nodo-domotica.nl
http://www.nodo-domotica.nl/forum/

Gegevens uit database weergeven op website?
http://www.nodo-domotica.nl/forum/viewtopic.php?f=35&t=1848
Pagina 1 van 2  Volgende »
Auteur:  BazemanKM [ 19 dec 2013, 22:28 ]
Titel:  Gegevens uit database weergeven op website?

Hallo,

Ik heb de WebApp lokaal draaien en in mijn database worden keurig iedere 5 minuten de waarden van mijn weerstation weggeschreven. Nu wil ik de actuele waarden ook kunnen weergeven op mijn website, zodat iedereen het kan zien. Hier heb ik denk ik php voor nodig. Ik heb al een stukje geschreven, nadat ik op internet heb gezocht, maar het werkt nog niet:

Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

/* Uitvoeren van de query.*/
$sql = 'SELECT sensor_id,data FROM nodo_tbl_sensor_data';

/* Het resultaat van de query in een array variabele stoppen, zodat
we deze later uit kunnen lezen.*/
$result = mysql_query($sql);

/* Met behulp van de functie mysql_fetch_assoc halen we de rijen
uit de array op.*/
while ($row = mysql_fetch_assoc($result)) {

/* Print het resultaat uit de huidige rij op het scherm.*/
echo  $row["sensor_id"];
echo  $row["data"];
echo "<br/>";
} else {
echo 'Geen data gevonden';
}
?>

Nu heb ik meerdere sensoren en dus ook meerdere sensor_id's, van iedere sensor_id moet dus de laatste waarde worden weergegeven. Heeft iemand een idee?
Auteur:  rtenklooster [ 20 dec 2013, 13:11 ]
Titel:  Re: Gegevens uit database weergeven op website?

Met je huidige query krijg je alle data van alle sensoren.
Je kunt een array maken met de gewenste sensoren bijv.
Code: Selecteer alles
$sensor_list = array("3","4","5");
dan dmv een foreach:

foreach($sensor_list as $sensor_id){
// Dan hier de query uitvoeren.
// Je wilt het laatste item hebben dus order by en limit.
$query = "SELECT `id`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`id` DESC
LIMIT 1;
// Hier wijs de de waarde toe aan een variabele
}


Er zijn methodes die dit deftiger doen maar zo is ie misschien beter begrijpbaar.
Niet getest hoor, dus geen garantie ;)

Wie weet helpt het je op weg.
Auteur:  BazemanKM [ 20 dec 2013, 13:42 ]
Titel:  Re: Gegevens uit database weergeven op website?

rtenklooster schreef:Wie weet helpt het je op weg.

Voor een deel, maar het werkt nog niet.
`nodo_tbl_sensor_data` heeft drie tabellen: sensor_id (dit zijn bij mij 881,882 en 883) data en timestamp.

Van iedere sensor wil ik netjes onder elkaar de laatste waarde laten zien, b.v.:

Temperatuur buiten (881): 10 graden C
Luchtvochtigheid (882): 45 %
Temperatuur binnen (883) 21 graden C
Auteur:  rtenklooster [ 20 dec 2013, 14:05 ]
Titel:  Re: Gegevens uit database weergeven op website?

BazemanKM schreef:
rtenklooster schreef:Wie weet helpt het je op weg.

Voor een deel, maar het werkt nog niet.
`nodo_tbl_sensor_data` heeft drie tabellen: sensor_id (dit zijn bij mij 881,882 en 883) data en timestamp.


Dan word het dus order by `nodo_tbl_sensor_data`.`timestamp`
Auteur:  rtenklooster [ 20 dec 2013, 14:21 ]
Titel:  Re: Gegevens uit database weergeven op website?

Dus zoiets:
Code: Selecteer alles
$sensor_list = array("3","4","5");
dan dmv een foreach:

foreach($sensor_list as $sensor_id){
// Dan hier de query uitvoeren.
// Je wilt het laatste item hebben dus order by en limit.
$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1;
$result = mysql_query($query);

 while($obj = mysql_fetch_assoc($result)){
// Hier wijs je de variabele toe/      
$output[] = $obj[data];
   }
}
// Dit is je resultaat array:

print_r($data);
Auteur:  BazemanKM [ 20 dec 2013, 16:17 ]
Titel:  Re: Gegevens uit database weergeven op website?

Het werkt nog niet, heb nu dit in een weer.php bestand:
Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("881","882","883");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1;
$result = mysql_query($query);

while($obj = mysql_fetch_assoc($result)){
$output[] = $obj[data];
   }
}

print_r($data);


?>

Wat gaat er nog mis?
Auteur:  rtenklooster [ 20 dec 2013, 16:34 ]
Titel:  Re: Gegevens uit database weergeven op website?

Probeer dit eens:
BazemanKM schreef:
Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("881","882","883");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1";
$output = mysql_query($query);

while($obj = mysql_fetch_assoc($result)){
$output[] = $obj[data];
   }
}

print_r($output);
// Om het duidelijker te maken:
echo "<br>";
echo "De laatste sensorwaarde van sensor 1 is: ".$output[0]."<br>";
echo "De laatste sensorwaarde van sensor 2 is: ".$output[1]."<br>";
echo "De laatste sensorwaarde van sensor 3 is: ".$output[2]."<br>";

?>

Wat gaat er nog mis?


Welke foutmeldingen krijg je? Zo is het wat lastig helpen.

Edit: bovenstaande code even getest, en het werkt.
Auteur:  rtenklooster [ 20 dec 2013, 16:49 ]
Titel:  Re: Gegevens uit database weergeven op website?

Kleine variatie om je nog verder op weg te helpen:
Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','wachtwoord') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("881","882","883");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1";
$output = mysql_query($query);
while($obj = mysql_fetch_assoc($result)){
$output[] = array("timestamp" => $obj[timestamp], "data" =>$obj[data]);
   }
}

print_r($output);
echo "<br>";
// Om het duidelijker te maken:
echo "De laatste sensorwaarde van sensor 1 is voor het laatst geupdate op: ".$output[0]['timestamp']." en de waarde was: ".$output[0]['data']."<br>";
echo "De laatste sensorwaarde van sensor 2 is voor het laatst geupdate op: ".$output[1]['timestamp']." en de waarde was: ".$output[1]['data']."<br>";
echo "De laatste sensorwaarde van sensor 3 is voor het laatst geupdate op: ".$output[2]['timestamp']." en de waarde was: ".$output[2]['data']."<br>";
?>
Auteur:  BazemanKM [ 20 dec 2013, 17:17 ]
Titel:  Re: Gegevens uit database weergeven op website?

Ik krijg geen foutmelding, eerst zag ik helemaal niets, nu slechts:

Resource id #4 (soms is hij ook 5)
De laatste sensorwaarde van sensor 1 is:
De laatste sensorwaarde van sensor 2 is:
De laatste sensorwaarde van sensor 3 is:
Auteur:  rtenklooster [ 20 dec 2013, 17:21 ]
Titel:  Re: Gegevens uit database weergeven op website?

Okay, dan heb je error reporting laag / uit staan in php.ini.

Naja hierbij even mijn volledige scriptje. Je maakt je db connectie denk ik niet goed.

Code: Selecteer alles
<?php

/* Verbinding met de MySQL database maken.*/
$db = mysql_connect('localhost','username','password') or die (mysql_error());

/* Selecteer de database waarop de query gedraaid moet worden.*/
mysql_select_db("nododom_webappdb", $db);

$sensor_list = array("3","5");

foreach($sensor_list as $sensor_id){

$query = "SELECT `timestamp`, `data`
FROM `nodo_tbl_sensor_data`
WHERE `sensor_id` = '".$sensor_id."'
ORDER BY  `nodo_tbl_sensor_data`.`timestamp` DESC
LIMIT 1";
$result = mysql_query($query) or die ("<b>A fatal MySQL error occured</b>.\n<br />Query: " . $query . "<br />\nError: (" . mysql_errno() . ") " . mysql_error());

while($obj = mysql_fetch_assoc($result)){
$output[] = array("timestamp" => $obj[timestamp], "data" =>$obj[data]);
   }
}

print_r($output);
// Om het duidelijker te maken:
echo "De laatste sensorwaarde van sensor 1 is voor het laatst geupdate op: ".$output[0]['timestamp']." en de waarde was: ".$output[0]['data']."<br>";
echo "De laatste sensorwaarde van sensor 2 is voor het laatst geupdate op: ".$output[1]['timestamp']." en de waarde was: ".$output[1]['data']."<br>";
echo "De laatste sensorwaarde van sensor 3 is voor het laatst geupdate op: ".$output[2]['timestamp']." en de waarde was: ".$output[2]['data']."<br>";


?>


Werkt hier 100%
Wellicht ten overvloede, maar je username en passw. zijn je db gegevens zoals ook in de webapp auth settings staan.

Edit: heb even mysql error reporting aan gezet in bovenstaande code.
Pagina 1 van 2 Alle tijden zijn GMT + 1 uur