JSON Ausgabe in Datenbank übertragen?
Hallo, ich habe folgendes Anliegen:
Ich bekomme bestimmte Messwerte im JSON-Format über meinen Webserver ausgegeben (siehe Link: https://ibb.co/NrJHnR5). Aus der Kategorie "measures" möchte ich beispielsweise die Werte "value" und "unit" in meine Datenbank (HeidiSQL) übertragen und anzeigen lassen.
Meine Datenbank sieht folgendermaßen aus: https://ibb.co/zFh0GjM
Mein Quellcode:
$connect = new mysqli("db", "root", "example", "mydb"); //Connect PHP to MySQL Database
$query = '';
$table_data = '';
if (!$connect){
echo "Fail: ", mysqli_connect_error();
}else{
echo"Verbindung steht!";
}
$data = file_get_contents('https://f30d57b2dh91.ngrok.io/weight.php');
foreach ($data as $row) { //Extract the Array Values by using Foreach Loop
$query .= "INSERT INTO User(value, unit) VALUES ('" . $row["value"] . "', '" . $row["unit"] . "'); "; // Make Multiple Insert Query
$table_data .= '
<tr>
<td>' . $row["value"] . '</td>
<td>' . $row["unit"] . '</td>
</tr>
'; //Data for display on Web page
}
if (mysqli_multi_query($connect, $query)) { //Run Mutliple Insert Query
echo '<h3>Imported JSON Data</h3><br />';
}
Die Verbindung zur Datenbank habe ich bereits hergestellt und erfolgreich getestet (siehe nächster Link). Ich kriege jedoch eine Fehlermeldung bei dem "foreach" Befehl ausgegeben (siehe Link: https://ibb.co/NrdJFyz).
Hat jemand eine Idee woran das liegen könnte?
Vielen Dank!
1 Antwort
In $data bekommt du einen String. Das foreach erwartet ein Array, daher die Fehlermeldung. Werfe das $data nach dem Einlesen in json_decode, dann bekommst du mit dem passenden Parameter ein Array zurück. Das lasse dir erstmal mit var_dump ausgeben, du willst wahrscheinlich in dem foreach nur über ein Unterarray ("measures") iterieren, um an die value / unit -Paare zu kommen...
Lass dir mal $data ausgeben, ob da auch null drin steht oder aber noch irgendwas zusätzlich zum JSON, was das json_decode nicht mag. Wenn da auch NULL drin steht, geht halt schon das file_get_contents schief, dann musst du nach den url wrappern in PHP schauen, ob die an sind, oder ob ddf. das Zertifikat da drin kaputt ist, etc...
Komplett kaputt ist das nicht, weil kein false kommt, aber es kommt halt ein leerer String zurück.. schaue mal, was in $http_response_header steht...
Da kriege ich die Antwort:
Verbindung steht!array(10) { [0]=> string(15) "HTTP/1.0 200 OK" [1]=> string(50) "Cache-Control: no-store, no-cache, must-revalidate" [2]=> string(17) "Content-Length: 0" [3]=> string(38) "Content-Type: text/html; charset=UTF-8" [4]=> string(35) "Date: Wed, 14 Jul 2021 21:20:38 GMT" [5]=> string(38) "Expires: Thu, 19 Nov 1981 08:52:00 GMT" [6]=> string(16) "Pragma: no-cache" [7]=> string(30) "Server: Apache/2.4.38 (Debian)" [8]=> string(62) "Set-Cookie: PHPSESSID=f3937c2bebb3cedb6f0b1075a3e63048; path=/" [9]=> string(24) "X-Powered-By: PHP/7.4.21" } NULL
Ich habe jetzt mal den Code umgestellt um mir die $data anzeigen zu lassen:
Quellcode:
Dabei bekomme ich folgende Antwort:
"Verbindung steht!NULL"
Wenn ich aber "https://684b7212dh91.ngrok.io/weight.php" separat aufrufe, bekomme ich meine Messergebnisse angezeigt?!