Teil 3.1 - Datenbank - Trennkomma
Wie bereits erwähnt, sollte das letzte Trennkomma der Zeilen im Datenbereich des Diagramms, nicht ausgegeben werden.
Zur besseren Übersicht nehme ich das Komma mal in ein eigenes echo:
Nach der letzten Zeile soll dieses Komma nun nicht mehr ausgegeben werden.
Die erste Zeile ist aber einfacher zu erkennen als die letzte. Daher nehme ich zuerst das echo mit Trennkomma nach vorne.
1. Das Problem umkehren
Zur besseren Übersicht nehme ich das Komma mal in ein eigenes echo:
echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";
echo ",";
Die erste Zeile ist aber einfacher zu erkennen als die letzte. Daher nehme ich zuerst das echo mit Trennkomma nach vorne.
echo ",";
echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";
Die neue Ausgabe wäre dann:
,{date: new Date(2013,10,25,0,0),t:1.1,h:82.0,p:1030.9,ws:2.7,wd:315.0,r:0.000,rs:0,wg:2.6,dp:-1.6,t2:3.1}
,{date: new Date(2013,10,25,0,5),t:1.1,h:81.0,p:1030.9,ws:2.3,wd:337.0,r:0.000,rs:0,wg:2.7,dp:-1.8,t2:3.1}
Nun muss also das erste Komma weg und nicht mehr das letzte. Das macht die Sache um vieles einfacher ;)
2. Variable
Nun müssen die Zeilen "unterscheidbar" gemacht werden. Ich verwende dazu eine Variable ($zeilenzaehler) welche sich nach dem ersten Durchlauf verändert.
Noch bevor die Ausgabe beginnt, eine Variable definieren.
Noch bevor die Ausgabe beginnt, eine Variable definieren.
$zeilenzaehler = 1;
Nach der ersten Zeilenausgabe mit echo wird dann die Variable geändert.
$zeilenzaehler = 2
;
Bei der ersten Zeile ist die Variable noch "1", bei der zweiten dann "2".
3. Echo mit "If"
Mit einer "If" Funktion gebe ich nun das Komma nur dann aus, wenn die Variable $zeilenzaehler nicht "1" ist.
(Zur Erinnerung: Das Komma ist ja jetzt vor jeder Datenzeile. Dieses soll also nur ausgegeben werden, wenn es nicht die erste Zeile ist)
Zuerst mit "If" die Variable überprüfen. Solange $seitenzähler 1 ist, wird das folgende echo (mit dem komma) nicht ausgeführt:
if ($zeilenzaehler != 1)
{
echo ",";
}
Im ersten Durchlauf ist $seitenzähler noch 1. Das echo mit dem Komma wird also nicht ausgeführt.Dann das echo mit der Datenzeile: (wird in jedem Durchlauf ausgegeben)
echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";
Und jetzt, nachdem die erste Zeile (ohne Komma) bereits ausgegeben wurde, die Variable auf "2" ändern.
$zeilenzaehler = 2;
Bei allen weiteren Durchläufen ist die Variable nun 2. Die "Bedingung" der "If" Frage oben, ist also ab jetzt immer "wahr", und das Komma kommt nun vor jeder weiteren Datenzeile.
4. Zusammenfassung:
Hier noch das ganze php Script:
<?php
//db verbindung
mysql_connect("Hostname", "Username","Password");
mysql_select_db("Database Name");
//db abfrage
$query = "
SELECT YEAR(datetime) AS dy, MONTH(datetime) -1 AS dm, DAY(datetime) AS dd, HOUR(datetime) AS th, MINUTE(datetime) AS tm, temp, hum, pressure
FROM wettertabelle
WHERE DATE(datetime) = '2013-11-25'
ORDER BY datetime
";
// NEU: Variable definieren
$zeilenzaehler = 1;
//ausgabe der zeilen
$result = mysql_query($query)
OR die("Error: $query <br>".mysql_error());
while($row = mysql_fetch_array($result))
{
// echo
if ($zeilenzaehler != 1)
{
echo ",";
}
echo "{date: new Date(".$row['dy'].",".$row['dm'].",".$row['dd'].",".$row['th'].",".$row['tm']."),t:".$row['temp'].",h:".$row['hum'].",p:".$row['pressure']."}";
//Variable jetzt auf 2
$zeilenzaehler = 2;
};
Man kann das ganze selbstverständlich noch abkürzen, optimieren oder auch komplett anders machen ;)
So würde ich das letzte komme entfernen.
AntwortenLöschen$linecounter = 1; //counter initialisieren
.
.
.
if ($linecounter == 1){
echo "{date: new Date($jahr, $monat, $tag, $stunde, $minute, 0, 0), val1:".$row['temp'].", val2:".$row['hum'].", val3:".$row['pressure'].", val4:".$row['wind'].", val5:".$row['winddir'].", val6:".$regenmesser.", val7:".$row['windb'].", val8:".$row['dew'].", val9:".$row['windchill'].", val10:".$row['solar'].", val11:".$row['uv'].", val12:".$row['sonnenschein'].", val13:".$row['snow'].",val16:".$row['regenrate'].",val14:".$row['nullgradgrenze']."}";
}
else{
echo ",\n{date: new Date($jahr, $monat, $tag, $stunde, $minute, 0, 0), val1:".$row['temp'].", val2:".$row['hum'].", val3:".$row['pressure'].", val4:".$row['wind'].", val5:".$row['winddir'].", val6:".$regenmesser.", val7:".$row['windb'].", val8:".$row['dew'].", val9:".$row['windchill'].", val10:".$row['solar'].", val11:".$row['uv'].", val12:".$row['sonnenschein'].", val13:".$row['snow'].",val16:".$row['regenrate'].",val14:".$row['nullgradgrenze']."}";
}
$linecounter++; //counter raufzählen