Achtung: Neue und aktualisierte Versionen der Tutorials finden Sie hier:
http://www.pscl.ch
Für Fragen, Kommentare und Kritik bin ich immer Dankbar.
Viel Spass und Grüsse
Ein Tutorial Blog von der Wetterstation Binningen (wetterbinningen.ch).
![]() |
| MySQL Tabellen Inhalt angezeigt von phpMyAdmin |
![]() |
| MySQL Tabellen Struktur angezeigt von phpMyAdmin |

INSERT INTO wettertabelle
(`datetime`,`temp`,`hum`,`pressure`)
VALUES
('2013-11-25 00:05:00','11.9','87','999.4')
INSERT INTO wettertabelle
(`datetime`,`temp`,`hum`,`pressure`)
VALUES
('2013-11-25 00:05:00','11.9','87','999.4')
$link = mysqli_connect("Hostname", "Username", "Password", "DBname");
$query = "
INSERT INTO wettertabelle
(`datetime`,`temp`,`hum`,`pressure`)
VALUES
('2013-11-25 00:10:00','11.9','87','999.4')
";
mysqli_query($link,$query);
<?php
//db verbindung
$link = mysqli_connect("Hostname", "Username", "Password", "DBname");
$query = "
INSERT INTO wettertabelle
(`datetime`,`temp`,`hum`,`pressure`)
VALUES
('2013-11-25 00:10:00','11.9','87','999.4')
";
mysqli_query($link,$query);
?>
<?php
//Dateiname der Importdatei
$dateiname = "EXP201311A.CSV";
//Anzahl Anfang Zeilen überspringen
$startzeile = 4;
//Die Import Datei öffnen
if (($handle = fopen("$dateiname", "r")) !== FALSE)
{
//zeilenzähler auf 0
$counter = 0;
//Jede Zeile abarbeiten
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
//counter rauf
$counter++;
//die ersten zeilen überspringen
if($counter >= $startzeile)
{
//das echo (ausgabe)
echo $data[0].", ".$data[1].", ".$data[3].", ".$data[10]. ", ".$data[11]."<br>\n";
}
}
//Import Datei schliessen
fclose($handle);
}
?>
![]() |
| Beachte: Datum/Zeit Format und evtl. falsche Spalten |
echo $data[0].", ". $data[1].", ".$data[3].", ".$data[10]. ", ".$data[11]."<br>\n";
$splitDate = explode(".", $data[0]); //Das Datum zerlegen
$splitTime = explode(":", $data[1]); //Die Zeit zerlegen
//Das Datum für Spalte datetime (2013-11-25 00:00)
$d1 = $splitDate[2]."-".$splitDate[1]."-".$splitDate[0]." ".$splitTime[0].":".$splitTime[1];
echo $d1.", ".$data[3].", ".$data[10]. ", ".$data[11]. "<br>\n";
<?php
//Dateiname der Importdatei
$dateiname = "EXP201311A.CSV";
//Anzahl Anfang Zeilen überspringen
$startzeile = 4;
//Die Import Datei öffnen
if (($handle = fopen("$dateiname", "r")) !== FALSE)
{
//zeilenzähler auf 0
$counter = 0;
//Jede Zeile abarbeiten
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
//zeilenzähler rauf
$counter++;
//erst ab dieser Zeile ausgeben
if($counter >= $startzeile)
{
// datum und Zeit zerlegen und neu zusammenbauen
$splitDate = explode(".", $data[0]);
$splitTime = explode(":", $data[1]);
$d1 = $splitDate[2]."-".$splitDate[1]."-".$splitDate[0]." ".$splitTime[0].":".$splitTime[1] ;
//das echo (ausgabe)
echo $d1.", ".$data[3].", ".$data[10]. ", ".$data[11]."<br>\n";
}
}
//Import Datei schliessen
fclose($handle);
}
?>
//db verbindung
$link = mysqli_connect("Hostname", "Username", "Password", "DBname");
$query = "
INSERT INTO wettertabelle
(`datetime`,`temp`,`hum`,`pressure`)
VALUES
('2013-11-25 00:05:00','11.9','87','999.4')
";
$query = "
INSERT INTO wettertabelle
(`datetime`,`temp`,`hum`,`pressure`)
VALUES
('$d1','$data[3]','$data[10]','$data[11]')
";
mysqli_query($link,$query);
<?php //Dateiname der Importdatei $dateiname = "EXP201311A.CSV"; //Anzahl Anfang Zeilen überspringen $startzeile = 4; //db verbindung $link = mysqli_connect("Hostname", "Username", "Password", "DBname"); //Die Import Datei öffnen if (($handle = fopen("$dateiname", "r")) !== FALSE) { //zeilenzähler auf 0 $counter = 0; //Jede Zeile abarbeiten while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { //counter rauf $counter++; //erst ab dieser Zeile ausgeben if($counter >= $startzeile) { // datum und Zeit zerlegen und neu zusammenbauen $splitDate = explode(".", $data[0]); $splitTime = explode(":", $data[1]); $d1 = $splitDate[2]."-".$splitDate[1]."-".$splitDate[0]." ".$splitTime[0].":".$splitTime[1] ; //das echo (ausgabe) echo $d1.", ".$data[3].", ".$data[10]. ", ".$data[11]."<br>\n"; //die db query $query = " INSERT INTO wettertabelle (`datetime`,`temp`,`hum`,`pressure`) VALUES ('$d1','$data[3]','$data[10]','$data[11]') "; //db query noch ausführen mysqli_query($link,$query); } } //Import Datei schließen fclose($handle); } ?>
//Dateiname der Importdatei
$dateiname = "EXP201311A.CSV";
//Ordner mit Importdateien
$dateiordner = "importdateien";
//Die Import Datei öffnen
if (($handle = fopen("$dateiname", "r")) !== FALSE)
{
//verzeichnis scannen und dateinamen in array speichern
$allFiles = scandir($dateiordner);
//die foreach schleife
foreach ($allFiles as $dateiname) {
//jetzt wie bisher die Datei öffnen
if (($handle = fopen("$dateiordner/$dateiname", "r")) !== FALSE)
{
//Import Datei schliessen
fclose($handle);
}
//Import Datei schliessen
fclose($handle);
}
}
| ws_newdata.csv von WsWin |
//Dateiname der Importdatei
$dateiname = "ws_newdata.csv";
//Anzahl Anfang Zeilen überspringen
$startzeile = 3;
$query = "
INSERT INTO wettertabelle
(`dateid`,`datetime`,`temp`,`hum`,`pressure`)
VALUES
('$d1','$data[3]','$data[10]','$data[11]')
";
mysqli_query($link,$query);
//Import Datei schließen
fclose($handle);
unlink('ws_newdata.csv');
?>
/usr/bin/php5 /home/www/webxx1/html/wetterseite/import/import-live.php >& /dev/null
SELECT temp FROM wettertabelle
SELECT temp FROM wettertabelle
![]() |
| sql-Befehl in phpMyAdmin |
SELECT datetime, temp FROM wettertabelle
SELECT * FROM wettertabelle
SELECT datetime AS Datum, temp AS Temperatur FROM wettertabelle
SELECT DATE(datetime), TIME(datetime), temp FROM wettertabelle
SELECT YEAR(datetime), HOUR(datetime), temp FROM wettertabelle
SELECT DATE(datetime), TIME(datetime), temp FROM wettertabelle
WHERE temp < 0
SELECT DATE(datetime), TIME(datetime), temp FROM wettertabelle WHERE YEAR(datetime) = '2013'
SELECT DATE(datetime), TIME(datetime), temp FROM wettertabelle WHERE YEAR(datetime) = '2013' AND temp < 0
SELECT temp FROM wettertabelle
ORDER BY temp ASC
SELECT temp FROM wettertabelle
ORDER BY temp DESC
SELECT temp FROM wettertabelle
LIMIT 10
SELECT temp FROM wettertabelle
LIMIT 11,10
SELECT AVG(temp) FROM wettertabelle
SELECT MAX(temp) FROM wettertabelle
SELECT MIN(temp) FROM wettertabelle
SELECT COUNT(*) FROM wettertabelle
SELECT AVG(temp) FROM wettertabelle
GROUP BY YEAR(datetime)
SELECT YEAR(datetime), AVG(temp) FROM wettertabelle
GROUP BY YEAR(datetime)
SELECT AVG(temp) FROM wettertabelle
GROUP BY MONTH(datetime)
SELECT AVG(temp) FROM wettertabelle
GROUP BY YEAR(datetime), MONTH(datetime)
SELECT MIN(temp), MAX(temp), AVG(temp) FROM wettertabelle
GROUP BY DATE(datetime)
SELECT temp FROM wettertabelle
GROUP BY YEAR(datetime)
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
<?php
//db verbindung
$link = mysqli_connect("Hostname", "Username", "Password", "DBname");
$query = " SELECT datetime, temp FROM wettertabelle ORDER BY temp DESC LIMIT 10 ";
$result = mysqli_query($link,$query);
while($row = mysqli_fetch_array($result))
{
echo $row['temp'];
}
mysqli_free_result($result);
?>
<?php
//db verbindung
$link = mysqli_connect("Hostname", "Username", "Password", "DBname");
//db sql abfrage
$query = "
SELECT datetime, temp
FROM wettertabelle
ORDER BY temp DESC
LIMIT 10
";
//resultat verfügbar machen
$result = mysqli_query($link,$query);
//Zeilen ausgeben
while($row = mysqli_fetch_array($result))
{
echo $row['temp'];
}
// ressourcen freigeben
mysqli_free_result($result);
?>
echo "Datum/Zeit: ".$row['datetime']." Temperatur: ".$row['temp']."<br>\n";
//Tabelle öffnen
echo "<table border=\"1\"> \n";
//Überschriftenzeile ausgeben
echo "<td>Datum und Zeit</td><td>Temperatur</td>\n";
//Zeilen ausgeben
while($row = mysqli_fetch_array($result))
{
echo "<tr>\n";
echo "<td>".$row['datetime']."</td>"."<td>".$row['temp']."</td>\n";
echo "</tr>\n";
}
//Tabelle schließen
echo "</table>\n";
$query = " SELECT temp, hum, pressure FROM wettertabelle ORDER BY datetime DESC LIMIT 1 ";
while($row = mysql_fetch_array($result))
{
$temperatur_aktuell = $row['temp'];
$luftfeuchte_aktuell = $row['hum'];
$luftdruck_aktuell = $row['pressure'];
}
Die aktuelle Temperatur: <?php echo $temperatur_aktuell; ?>
<html> <head> <?php //db verbindung $link = mysqli_connect("Hostname", "Username", "Password", "DBname"); //db sql abfrage $query = " SELECT temp, hum, pressure FROM wettertabelle ORDER BY temp DESC LIMIT 10 "; //resultat verfügbar machen $result = mysqli_query($link,$query); //werte in variablen speichern while($row = mysqli_fetch_array($result)) { $temperatur_aktuell = $row['temp']; $luftfeuchte_aktuell = $row['hum']; $luftdruck_aktuell = $row['pressure']; } // ressourcen freigeben mysqli_free_result($result); ?> <title>Unsere Wetterseite </title> </head> <body> <h1>Willkommen auf unserer Wetterseite:</h1> Die aktuelle Temperatur beträgt: <?php echo $temperatur_aktuell; ?> <br> blabla...<br><br> blablabla...<br><br><br><br> Hier alle aktuellen Werte:<br> <?php echo $temperatur_aktuell; ?><br> <?php echo $luftfeuchte_aktuell; ?><br> <?php echo $luftdruck_aktuell; ?><br> </body> </html>
![]() |
| Panel 1 mit Temperatur und Taupunkt. Panel 2 mit Luftfeuchtigkeit. |
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="amcharts/style.css" type="text/css">
<script src="amcharts/amcharts.js" type="text/javascript"></script>
<script src="amcharts/serial.js" type="text/javascript"></script>
<script src="amcharts/amstock.js" type="text/javascript"></script>
<script type="text/javascript">
// Start amcharts
// Chart Daten
var chartData = [ Hier kommen die Daten rein ];
// Start StockChart
AmCharts.makeChart("chartdiv",
{
//Chart Einstellungen
type: "stock",
pathToImages: "../amcharts/images/",
//Datesets definieren
dataSets:
[
{
fieldMappings:
[
{
fromField: "t",
toField: "t"
}
],
dataProvider: chartData,
categoryField: "date",
}
],
//Zeitachse (minPeriod: "mm" für minuten "DD" für Tage)
categoryAxesSettings:
{
minPeriod: "mm",
maxSeries: 1000
},
//Chart Panels
panels:
[
{
title: "Panel 1",
percentHeight: 100,
//Panel graphs (Datenlinie)
stockGraphs:
[
{
id: "g1",
title: "Temperature",
valueField: "t",
lineColor: "#cc0000",
negativeLineColor: "#0099CC",
useDataSetColors: false,
fillColors: ["#cc0000","#ffffff"],
negativeFillColors: ['#0099CC', '#ffffff'],
fillAlphas: 0.5
}
],
//Panel Legende
stockLegend:
{
valueTextRegular: "[[value]]",
markerType: "square"
}
}
],
//chart scrollbar
chartScrollbarSettings:
{
enabled: false
},
//Chart Cursor
chartCursorSettings:
{
valueBalloonsEnabled: true,
graphBulletSize: 1
},
//chart period selector
periodSelector:
{
inputFieldsEnabled: false,
periods:
[
{
period: "MAX",
label: "MAX"
}
]
},
// Einstellungen für alle Panels
panelsSettings:
{
usePrefixes: false
}
}
);
</script>
</head>
<body>
<div id="chartdiv" style="width:100%; height:600px;"></div>
</body>
</html>
var chartData = [ Hier kommen die Daten rein ];
{date: new Date(2013,10,25,0,0),t:3.7,h:90.0,p:1022.9}, {date: new Date(2013,10,25,0,5),t:3.7,h:90.0,p:1022.9}
var chartData = [
{date: new Date(2013,10,25,0,0),t:3.7,h:90.0,p:1022.9},
{date: new Date(2013,10,25,0,5),t:3.6,h:90.0,p:1022.9},
{date: new Date(2013,10,25,0,10),t:3.6,h:90.0,p:1022.9},
{date: new Date(2013,10,25,0,15),t:3.6,h:90.0,p:1022.9},
{date: new Date(2013,10,25,0,20),t:3.6,h:90.0,p:1022.9},
{date: new Date(2013,10,25,0,25),t:3.5,h:90.0,p:1022.9},
{date: new Date(2013,10,25,0,30),t:3.5,h:89.0,p:1023.1},
{date: new Date(2013,10,25,0,35),t:3.2,h:87.0,p:1023.1},
{date: new Date(2013,10,25,0,40),t:3.2,h:86.0,p:1023.1},
{date: new Date(2013,10,25,0,45),t:3.1,h:85.0,p:1023.1},
{date: new Date(2013,10,25,0,50),t:2.9,h:85.0,p:1023.3},
{date: new Date(2013,10,25,0,55),t:2.8,h:84.0,p:1023.3},
{date: new Date(2013,10,25,1,0),t:2.6,h:84.0,p:1023.3}
];
![]() |
| Das fertige Diagramm |
//Chart categorie Axis Settings
categoryAxesSettings:
{
minPeriod: "mm",
maxSeries: 10000
},
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="amcharts/style.css" type="text/css"> <script src="amcharts/amcharts.js" type="text/javascript"></script> <script src="amcharts/serial.js" type="text/javascript"></script> <script src="amcharts/amstock.js" type="text/javascript"></script> <script type="text/javascript"> // Start amcharts // Chart Daten var chartData = [ Hier kommen die Daten rein ]; // Start StockChart AmCharts.makeChart("chartdiv", { //Chart Einstellungen type: "stock", pathToImages: "../amcharts/images/", //Datesets definieren dataSets: [ { fieldMappings: [ { fromField: "t", toField: "t" } ], dataProvider: chartData, categoryField: "date", } ], //Zeitachse (minPeriod: "mm" für minuten "DD" für Tage) categoryAxesSettings: { minPeriod: "mm", maxSeries: 1000 }, //Chart Panels panels: [ { title: "Panel 1", percentHeight: 100, //Panel graphs (Datenlinie) stockGraphs: [ { id: "g1", title: "Temperature", valueField: "t", lineColor: "#cc0000", negativeLineColor: "#0099CC", useDataSetColors: false, fillColors: ["#cc0000","#ffffff"], negativeFillColors: ['#0099CC', '#ffffff'], fillAlphas: 0.5 } ], //Panel Legende stockLegend: { valueTextRegular: "[[value]]", markerType: "square" } } ], //chart scrollbar chartScrollbarSettings: { enabled: false }, //Chart Cursor chartCursorSettings: { valueBalloonsEnabled: true, graphBulletSize: 1 }, //chart period selector periodSelector: { inputFieldsEnabled: false, periods: [ { period: "MAX", label: "MAX" } ] }, // Einstellungen für alle Panels panelsSettings: { usePrefixes: false } } ); </script> </head> <body> <div id="chartdiv" style="width:100%; height:600px;"></div> </body> </html>
fieldMappings:
[
{
fromField: "t",
toField: "t"
}
],
fieldMappings:
[
{
fromField: "t",
toField: "t"
},
{
fromField: "h",
toField: "h"
}
],
//Chart Panels
panels:
[
{
title: "Panel 1",
percentHeight: 100,
//Panel graphs (dataline)
stockGraphs:
[
{
id: "g1",
title: "Temperature",
valueField: "t",
lineColor: "#cc0000",
negativeLineColor: "#0099CC",
useDataSetColors: false,
fillColors: ["#cc0000","#ffffff"],
negativeFillColors: ['#0099CC', '#ffffff'],
fillAlphas: 0.5
}
],
// panel Legend
stockLegend:
{
valueTextRegular: " ",
markerType: "square"
}
}
],
//Chart Panels panels: [ { title: "Panel 1", percentHeight: 100, //Panel graphs (dataline) stockGraphs: [ { id: "g1", title: "Temperature", valueField: "t", lineColor: "#cc0000", negativeLineColor: "#0099CC", useDataSetColors: false, fillColors: ["#cc0000","#ffffff"], negativeFillColors: ['#0099CC', '#ffffff'], fillAlphas: 0.5 } ], // panel Legend stockLegend: { valueTextRegular: "[[value]]", markerType: "square" } }, { title: "Panel 2", percentHeight: 100, //Panel graphs (dataline) stockGraphs: [ { id: "g2", title: "Humity", valueField: "h", lineColor: "#0099cc", useDataSetColors: false, fillColors: ["#0099cc","#ffffff"], fillAlphas: 0.5 } ], // panel Legend stockLegend: { valueTextRegular: "[[value]]", markerType: "square" } } ],
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="amcharts/style.css" type="text/css">
<script src="amcharts/amcharts.js" type="text/javascript"></script>
<script src="amcharts/serial.js" type="text/javascript"></script>
<script src="amcharts/amstock.js" type="text/javascript"></script>
<script type="text/javascript">
// Start amcharts
// Chart Daten
var chartData = [ Hier kommen die Daten rein ];
// Start StockChart
AmCharts.makeChart("chartdiv",
{
//Chart Einstellungen
type: "stock",
pathToImages: "../amcharts/images/",
//Datesets definieren
dataSets:
[
{
fieldMappings:
[
{
fromField: "t",
toField: "t"
}
],
dataProvider: chartData,
categoryField: "date",
}
],
//Zeitachse (minPeriod: "mm" für minuten "DD" für Tage)
categoryAxesSettings:
{
minPeriod: "mm",
maxSeries: 1000
},
//Chart Panels
panels:
[
{
title: "Panel 1",
percentHeight: 100,
//Panel graphs (Datenlinie)
stockGraphs:
[
{
id: "g1",
title: "Temperature",
valueField: "t",
lineColor: "#cc0000",
negativeLineColor: "#0099CC",
useDataSetColors: false,
fillColors: ["#cc0000","#ffffff"],
negativeFillColors: ['#0099CC', '#ffffff'],
fillAlphas: 0.5
}
],
//Panel Legende
stockLegend:
{
valueTextRegular: "[[value]]",
markerType: "square"
}
}
],
//chart scrollbar
chartScrollbarSettings:
{
enabled: false
},
//Chart Cursor
chartCursorSettings:
{
valueBalloonsEnabled: true,
graphBulletSize: 1
},
//chart period selector
periodSelector:
{
inputFieldsEnabled: false,
periods:
[
{
period: "MAX",
label: "MAX"
}
]
},
// Einstellungen für alle Panels
panelsSettings:
{
usePrefixes: false
}
}
);
</script>
</head>
<body>
<div id="chartdiv" style="width:100%; height:600px;"></div>
</body>
</html>
fieldMappings:
[
{
fromField: "t",
toField: "t"
}
],
fieldMappings:
[
{
fromField: "t",
toField: "t"
},
{
fromField: "dp",
toField: "dp"
}
],
stockGraphs:
[
{
id: "g1",
title: "Temperature",
valueField: "t",
lineColor: "#cc0000",
negativeLineColor: "#0099CC",
useDataSetColors: false,
fillColors: ["#cc0000","#ffffff"],
negativeFillColors: ['#0099CC', '#ffffff'],
fillAlphas: 0.5
}
]
stockGraphs:
[
{
id: "g1",
title: "Temperature",
valueField: "t",
lineColor: "#cc0000",
negativeLineColor: "#0099CC",
useDataSetColors: false,
fillColors: ["#cc0000","#ffffff"],
negativeFillColors: ['#0099CC', '#ffffff'],
fillAlphas: 0.5
},
{
id: "g2",
title: "Dewpoint",
valueField: "dp",
lineColor: "#cc0000",
negativeLineColor: "#0099CC",
useDataSetColors: false,
fillColors: ["#cc0000","#ffffff"],
negativeFillColors: ['#0099CC', '#ffffff'],
fillAlphas: 0.5
}
]
{
title: "Panel 2",
percentHeight: 50,
valueAxes:
[
{
id: "p2va1",
position: "left"
},
{
id: "p2va2",
color:"#1CB30B",
position: "right"
}
],
...
stockGraphs:
[
{
id: "g3",
title: "Hum",
valueField: "h",
valueAxis: "p2va1",
lineColor: "#cc0000",
negativeLineColor: "#0099CC",
useDataSetColors: false,
fillColors: ["#cc0000","#ffffff"],
negativeFillColors: ['#0099CC', '#ffffff'],
fillAlphas: 0.5
},
{
id: "g4",
title: "Pressure",
valueField: "p",
valueAxis:"p2va2",
lineColor: "#1CB30B",
useDataSetColors: false,
fillColors: ["#1CB30B","#ffffff"],
fillAlphas: 0
}
],
categoryAxesSettings:
{
//kleinste angezeigte Periode ("mm" für Minuten "DD" für Tage)
minPeriod: "mm",
//maximal angezeigte Datenpunkte bevor gruppiert wird
maxSeries: 1000,
//oder z.B Schriftgrösse etc.
fontSize: 8
},
title: "Pressure",
showCategoryAxis: false,
percentHeight: 50,
...
valueAxes:
[
{
//id um diese achse dem betreffenden graph zuweisen zu können
id: "p2va2",
// dann beliebige Elemente
color:"#1CB30B",
position: "right"
}
],
valueAxis: "p2va2",
valueAxes: [ { id: "p3va2", color:"#1CB30B", position: "right" maximum: 360, minimum: 0 } ],
valueAxes: [ { id: "p4va1", color:"#1CB30B", position: "right", guides: [ { value: 10, label: "Grenzwert" } } } ],
stockLegend:
{
// Ausgabe (z.B: 12 km/h)
valueTextRegular: "[[VALUE]]km/h",
//Das Symbol
markerType: "circle"
}
panelsSettings:
{
// Prefixes würden Werte über 1000 mit 1K abkürzen.
usePrefixes: false,
// Zahlenformat ändern auf 1.000,0
numberFormatter: {precision:-1, decimalSeparator:',', thousandsSeparator:'.'}
// Zahlenformat ändern auf 1'000.0
numberFormatter: {precision:-1, decimalSeparator:'.', thousandsSeparator:'\''}
}
valueAxesSettings:{
// Schriftgrösse
fontSize: 9,
//Schriftfarbe
color:"#cccccc"
},