Beste allemaal,

ik ben aan het proberen om gegevens uit een database te trekken en deze in een highchart in te lezen.
met veel proberen zijn er al veel dingen gelukt. echter een laatste dingetje wil nog niet lukken.

in onderstaand php script bouw ik uiteraard eerst een db-connectie ($con) op.
ik lees een aantal records in van tabel1. en zet de Timestamp string om naar unixTime in milliseconden. en plak er nog de temperatuur aan vast.

<code>$query = "SELECT * FROM tabel1 WHERE id BETWEEN 100 AND 110";

$sth = $con->query($query) or die($con->error);
$rows = array();

while($r = $sth->fetch_array()){
$timeUnix = strtotime($r['Timestamp']) * 1000;

$rows = [$timeUnix. ", ". $r['temp_uit']];
$result = array();


array_push($result, $rows);


print json_encode($rows, JSON_NUMERIC_CHECK);

}</code>

resultaat van bovenstaande:

["1584462129000, 17.25"]["1584462190000, 17.25"]["1584462251000, 17.25"]["1584462312000, 17.25"]["1584462373000, 17.21"]["1584462434000, 17.21"]["1584462494000, 17.21"]["1584462555000, 17.21"]["1584462616000, 17.21"]["1584462677000, 17.21"]["1584462738000, 17.21"]

maar wat ik eigenlijk moet hebben is: (let op de eerste en laatste dubbel blokhaak en de komma's

[
["1584462129000, 17.25"],["1584462190000, 17.25"],["1584462251000, 17.25"],["1584462312000, 17.25"],["1584462373000, 17.21"],["1584462434000, 17.21"],["1584462494000, 17.21"],["1584462555000, 17.21"],["1584462616000, 17.21"],["1584462677000, 17.21"],["1584462738000, 17.21"]
]

Ik kom er niet meer uit... kan iemand mij helpen?
Waarom begin je met <script> en eindig je met </script> ? dit is voor javascript maar niet voor PHP...

<?php
// selecteer enkel wat je nodig hebt in plaats van een *
$query = "SELECT Timestamp, temp_uit FROM tabel1 WHERE id BETWEEN 100 AND 110";

// controleer of je query slaagt en geef anders ook een foutmelding terug
$sth = $con->query($query) or die($con->error);
if($sth === false) {
exit (json_encode(['error' => $sth->error]));
}

// we gaan het resultaat opbouwen en beginnen met een lege array
$result = [];
while ($r = $sth->fetch_array()) {
$timeUnix = strtotime($r['Timestamp']) * 1000;

// met $result[] voegen we een nieuw element aan de array toe
// met round kunnen we een waarde omzetten naar een float type en direct afronden op bijv twee decimalen.
$result[] = [$timeUnix . ", " . round($r['temp_uit'], 2)];
}

print json_encode($result);
?>
...
Uhm, je hebt allemaal subarrays bestaande uit een string met hierin twee waarden gescheiden door een komma? Ehhhh? Is dat echt het formaar wat je nodig hebt?

Ik zou eerder ["1584462129000[color=#ff0000]"[/color], [color=#ff0000]"[/color]17.25"] etc verwachten?

Wat er nu gebeurt is dat je $rows en $result elke stap van de loop overschrijft.
Dus daar zou ik eerder verwachten $rows[] = [$timeUnix, $r['temp_uit']];
Wat is anders het nut van een string in een subarray stoppen?

En het uitdraaien van $rows doe je uiteraard na het einde van de loop :p.
Thomas van den Heuvel op 19/03/2020 16:21:10

Ik zou eerder ["1584462129000[color=#ff0000]"[/color], [color=#ff0000]"[/color]17.25"] etc verwachten?


Ja dat vroeg ik me dus ook af... in dat geval zou regel 18 iets anders worden.
<?php
$result[] = [$timeUnix, round($r['temp_uit'], 2)];
?>
Beste Frank,

dank voor de uitleg. <script> probeerde ik te gebruiken om zo'n mooi code stukje te krijgen.. maar dat moet dus <?php ?> zijn...

[1167609600000, 0.7537],[1167696000000, 0.7537],

dit is een stukje uit het voorbeeld van highchart. de aanhalingstekens vallen (dacht ik) weg bij JavaScript.

Ik heb nu het script aangepast met de allerlaatste aanpassing van Frank. de output nu is

[[1584462129000,18.19],[1584462190000,18.62],[1584462251000,18.62],[1584462312000,18.62],[1584462373000,18.62],[1584462434000,18.53],[1584462494000,18.7],[1584462555000,18.7],[1584462616000,18.7],[1584462677000,18.79],[1584462738000,19.05]]

Wat eigenlijk helemaal super is. Fijn dat je er overigens ook commentaar enz. bij hebt gezet. zeer duidelijk zo.

Thanx
Nou mooi, success met de charts Paul


[size=xsmall]Toevoeging op 19/03/2020 17:35:21:[/size]

>> de aanhalingstekens vallen (dacht ik) weg bij JavaScript.

Nee dat is niet het geval. En computer en de meeste programmeertalen maken onderscheid tussen getallen en tekst. Tekst staat tussen aanhalingtekens maar getallen niet in de programmeertalen die ik ken.

[size=xsmall]Toevoeging op 19/03/2020 17:38:35:[/size]

De reden dat dit onderscheid gemaakt wordt is omdat je de computer met getallen kunt laten rekenen. In javascript krijg je dit verschil:


alert(123 + 123); // 246


en


alert("123" + "123"); // 123123

Reageren