Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

Für Entwickler und Tüfftler
zunshiner
Offline
Beiträge: 98
Registriert: 08 Dez 2020, 14:33
Hat sich bedankt: 5 mal
Danksagung erhalten: 10 mal

Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#1

Beitrag von zunshiner »

Hallo zusammen,
ich versuche jetzt die Daten die ich aus einer Abfrage der API bei Ecowitt erhalte regelmäßig in eine eigene Datenbank zu schreiben:

Code: Alles auswählen

<?php

#Datenbank
$pdo = new PDO('mysql:host=xxx.xxx.xxx.xxx:3304;dbname=dbxxxxxx_xxxx', 'dbuser', 'dbpasswort');

#JSON-Datei
$url       = "https://api.ecowitt.net/api/v3/device/.....
$json      = file_get_contents($url); 
$json_data = json_decode($json, true);

#Werte ermitteln
$temp  = $json_data["data"]["outdoor"]["temperature"]["value"]; 
$wind  = $json_data["data"]["wind"]["wind_speed"]["value"];  
$dir   = $json_data["data"]["wind"]["wind_direction"]["value"];  
$gust  = $json_data["data"]["wind"]["wind_gust"]["value"];  
$pres  = $json_data["data"]["pressure"]["relative"]["value"];  
$humi  = $json_data["data"]["outdoor"]["humidity"]["value"]; 
$solar = $json_data["data"]["solar_and_uvi"]["solar"]["value"]; 
$uvi   = $json_data["data"]["solar_and_uvi"]["uvi"]["value"]; 
$rain  = $json_data["data"]["rainfall"]["hourly"]["value"];   

#Datum für Datenbank vorbereiten
$heute = getdate();
$year     = $heute["year"];
$month    = $heute["month"];
$day      = $heute["mday"];
$wday     = $heute["wday"];

#In Datenbank schreiben
$statement = $pdo->prepare("INSERT INTO Wetterwerte (DAY, MONTH, YEAR, WEEKDAY, TEMP, HUMI, PRES, SOLAR, UVI, RAIN, WIND, GUST, DIR) 
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$statement->execute(array($day, $month, $year, wday, $temp, $humi, $pres, $solar, $uvi, $rain, $wind, $gust, $dir)); 

?> 
Wenn ich die PHP-Datei aufrufe wird kein Wert in die Datenbank geschrieben.
Leider bin ich kein PHP-Experte - vielleicht sieht hier jemand warum das nicht klappt?

Die Variablen sind alle gefüllt, die Datenbank ist angelegt, der DB-User und das DB-Passwort stimmen.

Grüße
Mathias
Benutzeravatar
olicat
Offline
Beiträge: 2003
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 26 mal
Danksagung erhalten: 411 mal
Kontaktdaten:

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#2

Beitrag von olicat »

Hi!
$statement->execute(array($day, $month, $year, wday, $temp, $humi, $pres, $solar, $uvi, $rain, $wind, $gust, $dir));
Da fehlt ein "$" bei $wday.
Und im code-Block fehlt bei $url das abschliessende Hochkomma. Das ist aber vermutlich nur beim Kopieren/Entfernen verloren gegangen.
Wie sieht denn ueberhaupt die komplette $url bei Dir aus? Den application_key, den api_key und die mac darfst Du ja gerne x-en.

Oliver
zunshiner
Offline
Beiträge: 98
Registriert: 08 Dez 2020, 14:33
Hat sich bedankt: 5 mal
Danksagung erhalten: 10 mal

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#3

Beitrag von zunshiner »

solche Fehler ärgern mich ... da liest man zig mal drüber und das fällt nicht auf - den $ hab ich ergänzt jetzt.

die url sieht folgendermaßen aus - das Hochkomma ist schon da.

Code: Alles auswählen

$url       = "https://api.ecowitt.net/api/v3/device/real_time?application_key=XXX&api_key=XXX&mac=XXX&call_back=all&temp_unitid=1&pressure_unitid=3&wind_speed_unitid=7&rainfall_unitid=12&solar_radiation_unitid=16"; 
Allerdings funktioniert es damit aber jetzt immer noch nicht in der Datenbank kommen noch keine Werte an.
zunshiner
Offline
Beiträge: 98
Registriert: 08 Dez 2020, 14:33
Hat sich bedankt: 5 mal
Danksagung erhalten: 10 mal

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#4

Beitrag von zunshiner »

und die URL habe ich aus diesem Beitrag:
https://wetterstationsforum.info/viewto ... 534#p10534
zunshiner
Offline
Beiträge: 98
Registriert: 08 Dez 2020, 14:33
Hat sich bedankt: 5 mal
Danksagung erhalten: 10 mal

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#5

Beitrag von zunshiner »

Nachdem es im weltweiten Web ja jede Menge Seiten gibt die dieses Problem potentiell lösen könnten, habe ich heute einen anderen Ansatz gewählt, leider mit dem gleichen Ergebnis --> einer leeren Datenbanktabelle.

Mein Code sieht jetzt so aus:

Code: Alles auswählen

<?php

#Datenbank
$db = mysqli_connect("xxx.xxx.xxx.xxx", "dbusername", "dbpassword", "dbname");
if(!$db)
{
  exit("Verbindungsfehler: ".mysqli_connect_error());
}

#JSON-Datei
$url       = "https://api.ecowitt.net/api/v3/device/real_time?application_key=xxxx&api_key=xxxx&mac=xxxx&call_back=all&temp_unitid=1&pressure_unitid=3&wind_speed_unitid=7&rainfall_unitid=12&solar_radiation_unitid=16"; 
$json      = file_get_contents($url); 
$json_data = json_decode($json, true);

#Werte ermitteln
$temp  = $json_data["data"]["outdoor"]["temperature"]["value"]; 
$humi  = $json_data["data"]["outdoor"]["humidity"]["value"]; 
$pres  = $json_data["data"]["pressure"]["relative"]["value"];  
$solar = $json_data["data"]["solar_and_uvi"]["solar"]["value"]; 
$uvi   = $json_data["data"]["solar_and_uvi"]["uvi"]["value"]; 
$rain  = $json_data["data"]["rainfall"]["hourly"]["value"];   
$wind  = $json_data["data"]["wind"]["wind_speed"]["value"];  
$gust  = $json_data["data"]["wind"]["wind_gust"]["value"];  
$dir   = $json_data["data"]["wind"]["wind_direction"]["value"];  

#Werte testweise ausgeben
echo "Temperatur ". $temp. "°C". "<br />";
echo "Wind ". $wind. "km/h aus ". $dir. "°". "<br />";
echo "Windböe ". $gust. "km/h aus ". $dir. "°". "<br />";
echo "Regen heute ". $rain. "mm". "<br />";
echo "Solarstrahlung ". $solar. "". "<br />";
echo "UV-Index ". $uvi. "". "<br />";
echo "Luftdruck ". $pres. "hPa". "<br />";
echo "Luftfeuchtigkeit ". $humi. "%". "<br />";

#Datum und Uhrzeit
$heute = getdate();

#Datumswerte vorbereiten
$year     = $heute["year"];
$month    = $heute["mon"];
$day      = $heute["mday"];
$wday     = $heute["wday"];
$hour     = $heute["hours"];

#Datumswerte probehalber ausgeben
echo "Tag ". $day;
echo "Monat ". $month;
echo "Jahr ". $year;
echo "Wochentag ". $wday;
echo "Stunde ". $hour;

#In Datenbank schreiben
$eintragen = mysqli_query($db, "INSERT INTO Stundenwerte (DAY, WDAY, MONTH, YEAR, HOUR, TEMP, HUMI, PRES, SOLAR, UVI, RAIN, WIND, GUST, DIR) VALUES ('$day', '$wday', '$month', '$year', '$hour', '$temp', '$humi', '$pres', '$solar', '$uvi', '$rain', '$wind', '$gust', '$dir')");
?> 
Jetzt hätte ich ja gedacht, dass damit zumindest irgendeine Antwort auf dem Bildschirm erscheint (oder eben in der Datenbank, aber nullinger, weder die echos noch ein Verbindungsfehler wird ausgegeben.

Sollte nicht wenigstens das der Fall sein, wenn ich diese php-Datei aufrufe?

Grüße
Mathias
Benutzeravatar
olicat
Offline
Beiträge: 2003
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 26 mal
Danksagung erhalten: 411 mal
Kontaktdaten:

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#6

Beitrag von olicat »

Hi!

Was passiert denn, wenn Du im Browser die URL eingibst?
Erhaeltst Du ein korrektes JSON?

Wenn ich die DB-Zeilen auskommentiere und die Echos noch mit einem "\n" versehe kann ich auf der Konsole zumindest die entsprechenden echos sehen:

Code: Alles auswählen

Temperatur 25.0°C<br />
Wind 0.4km/h aus 237°<br />
Windböe 9.4km/h aus 237°<br />
Regen heute 0.0mm<br />
Solarstrahlung 0.0<br />
UV-Index 0<br />
Luftdruck 1013.5hPa<br />
Luftfeuchtigkeit 73%<br />
Tag 27
Monat 6
Jahr 2022
Wochentag 1
Stunde 22
Und auf den Webserver kopiert erhalte ich das auch als html-Seite.

Und nach Reaktivierung der Datenbank-Zeile und Erzeugung der initialen Datenbank inklusive der Tabelle Stundenwerte schreibt das PHP-Script auch brav die Daten da rein.
Welche PHP-Version setzt Du ein?

Oliver
Zuletzt geändert von olicat am 27 Jun 2022, 22:44, insgesamt 1-mal geändert.
zunshiner
Offline
Beiträge: 98
Registriert: 08 Dez 2020, 14:33
Hat sich bedankt: 5 mal
Danksagung erhalten: 10 mal

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#7

Beitrag von zunshiner »

Ja, mit der URL erhalte ich ein JSON.

Und die Ausgabe der Werte geht auch, siehe
http://www.waigowetter.de
Benutzeravatar
olicat
Offline
Beiträge: 2003
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 26 mal
Danksagung erhalten: 411 mal
Kontaktdaten:

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#8

Beitrag von olicat »

Hi!

Laeuft das Script auf dem gleichen Server wie der mySQL?
Dann nimm mal in mysqli_connect statt der IP-Adresse "localhost".

Achja, siehe oben noch die hinzugefuegten Hinweise zur Datenbank.

Oliver
zunshiner
Offline
Beiträge: 98
Registriert: 08 Dez 2020, 14:33
Hat sich bedankt: 5 mal
Danksagung erhalten: 10 mal

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#9

Beitrag von zunshiner »

ja, auf dem gleichen Server.
localhost eingetragen anstatt IP-Adresse
Ergebnis das gleiche --> keine Ausgabe und keine Einträge in der Datenbanktabelle

Es müsste doch zumindest eine Ausgabe kommen, oder?
Benutzeravatar
olicat
Offline
Beiträge: 2003
Registriert: 07 Dez 2020, 20:33
Wohnort: Hohen Neuendorf
Hat sich bedankt: 26 mal
Danksagung erhalten: 411 mal
Kontaktdaten:

Re: Mit PHP einen Eintrag in einer MYSQL-Datenbank erzeugen

#10

Beitrag von olicat »

Hi!

Starte das Script erstmal auf der Konsole. Da solltest Du irgendwelche Fehlermeldungen sehen koennen.

Oliver
Antworten