Langzeitwerte in mysql speichern

Hilfe zu php Wetterscripten
Benutzeravatar
Sprite01
Beiträge: 867
Registriert: Fr 8. Jan 2010, 22:04
Wohnort: Dessau
Kontaktdaten:

Langzeitwerte in mysql speichern

Beitrag von Sprite01 »

Bei unserem Regionalwetter-SA gibt es eine Seite mit Langzeitwerten.
Dazu werden die txt-Dateien aller Teilnehmer ausgelesen, verglichen und der jeweils
größte oder kleinste Eintrag bei einem Messwert in eine Datenbank gespeichert.
Dies funktioniert auch prinzipiell.
Allerdings kommt es nach Tagen oder Wochen schon mal vor, das dann ein nicht gewollter Wert auftaucht.
Also z. Bsp. war das Temperaturminimum + 5cm am 05.01.2010 mit -18,3 °C.
Heute steht auf ein mal wieder ein Wert von -1,5 °C drin.
Hauptsächlich dieser Wert und das Temperaturmaximum betrifft es.
Was kann dieses auftauchen von "falschen" Messwerten verursachen ?
Da ein ordentlicher Wert auftaucht gehe ich nicht davon aus das Blödsinn in der txt steht.
Was schon mal vorkommt, das ein Leerzeichen davor ist (das habe ich schon beobachtet).
Wird das durch php dann gleich fehlinterpretiert, also kann ein Leerzeichen die <> - Abfrage kaputt machen ?

Ich versuche mal auszugsweise einen betreffenden Teil hier rein zu bringen, hoffe das es erst mal ein wenig verständlich wird:
$tempb und $standort sind Werte aus der gesendeten txt-Datei, die erste if-Anweisung wird als Schleife für alle txt abgearbeitet.

Code: Alles auswählen

.
.
.
$temp5 = 80;
$orttemp5 = "";

         if ($temp5 > $tempb and $tempb != "n.v." and $tempb != "n.V." and $tempb != "--" and $tempb != "falsch")
            {
            $temp5 = $tempb;
            $orttemp5 = $standort;
	         $tmin5datum = $datum;
            $tmin5uhr = $uhrzeit;
            }

//Tmin5cm
$abfrage = "SELECT wert FROM tmin5cm";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{$tmin5cm_db = $row->wert;}
.
.
.
if ($tmin5cm_db > $temp5)
{
$aendern = "UPDATE tmin5cm Set datum = '$tmin5datum', zeit = '$tmin5uhr', wert = '$temp5', station = '$orttemp5'";
$update = mysql_query($aendern);
}
.
.
.
Michael
Beiträge: 2515
Registriert: Fr 8. Jan 2010, 20:30

Re: Langzeitwerte in mysql speichern

Beitrag von Michael »

Hallo Dirk,
Sprite01 hat geschrieben:Wird das durch php dann gleich fehlinterpretiert, also kann ein Leerzeichen die <> - Abfrage kaputt machen ?
Ja klar das kann vorkommen.

Du musst immer dafür Sorge tragen das wirklich nur numerische Werte in die Datenbank geschrieben werden.
Leerzeichen sollten beim einlesen immer entfernt werden.

Das heißt Du mußt zuerst immer dafür Sorge tragen das Du auch wirklich numerische Werte verarbeitest und keine Strings.

Bei Prüfung auf String ebene ist 1,5 kleiner als 18,3.
Gruß

Michael
Benutzeravatar
Sprite01
Beiträge: 867
Registriert: Fr 8. Jan 2010, 22:04
Wohnort: Dessau
Kontaktdaten:

Re: Langzeitwerte in mysql speichern

Beitrag von Sprite01 »

Dann werde ich mal als erstes versuchen die evtl. auftretenden Komme in Punkt umzuwandeln.
Hoffe meine Idee mit dem str_replace stimmt dann so.

Code: Alles auswählen

 
if(file_exists($datei))
     {
      $inhalt = file($datei);
      $anzahl = count($inhalt);
      for($i = 0; $i < $anzahl; $i++)
        { #Abarbeitung der Zeilen (hier nur eine)
         $eintrag = explode(";",$inhalt[0]);
         $eintrag = str_replace(",", ".", "$eintrag"); //das wäre dann meine eingefügte Zeile
.
.
.
Michael
Beiträge: 2515
Registriert: Fr 8. Jan 2010, 20:30

Re: Langzeitwerte in mysql speichern

Beitrag von Michael »

Hallo Dirk,

wenn dieser Wert in die Datenbank wandert solltest Du statt str_replace lieber str_ireplace verwenden.
Gruß

Michael
Benutzeravatar
Sprite01
Beiträge: 867
Registriert: Fr 8. Jan 2010, 22:04
Wohnort: Dessau
Kontaktdaten:

Re: Langzeitwerte in mysql speichern

Beitrag von Sprite01 »

Ich habe es mir wahrscheinlich zu einfach vorgestellt.
Wollte nur die Rückmeldung geben das es so nicht funktioniert.
Im Moment aber keine Zeit für weitere Tests.
Benutzeravatar
Sprite01
Beiträge: 867
Registriert: Fr 8. Jan 2010, 22:04
Wohnort: Dessau
Kontaktdaten:

Re: Langzeitwerte in mysql speichern

Beitrag von Sprite01 »

Ich muss auf jeden Fall erst mal Leerzeichen raus filtern. Wie kann ich das machen ?
Ein paar txt sehen so aus (hier zur Darstellung Unterstrich = Leerzeichen)

29.05.2010;_____12.0;5.3;1017;_____________2:34____;
Michael
Beiträge: 2515
Registriert: Fr 8. Jan 2010, 20:30

Re: Langzeitwerte in mysql speichern

Beitrag von Michael »

Hallo Dirk,

trim($deintext) entfernt alle Leerzeichen am Anfang und am Ende.
und $deintext = preg_replace("/ +/", " ", $deintext); Entfernt alle Leerzeichen.
Gruß

Michael
Benutzeravatar
Sprite01
Beiträge: 867
Registriert: Fr 8. Jan 2010, 22:04
Wohnort: Dessau
Kontaktdaten:

Re: Langzeitwerte in mysql speichern

Beitrag von Sprite01 »

:oops: Nach den Befehlen hätte ich auch schauen können, Entschuldigung.
Auf jeden Fall der richtige, es klappt ... :)

Könnte das auch die Ursache für das falsch gerechnete "-21.3" ist größer als "-25.4" sein ?

Ich habe jetzt jedenfalls allen Variablen erst einmal ein:

Code: Alles auswählen

      $variable = preg_replace("/ +/", " ", $variable);
      $variable = str_replace(",", ".", "$variable");
verpasst.
Michael
Beiträge: 2515
Registriert: Fr 8. Jan 2010, 20:30

Re: Langzeitwerte in mysql speichern

Beitrag von Michael »

Sprite01 hat geschrieben:Nach den Befehlen hätte ich auch schauen können, Entschuldigung.
Kein Problem.
Sprite01 hat geschrieben:Könnte das auch die Ursache für das falsch gerechnete "-21.3" ist größer als "-25.4" sein ?
Ja kann sein..

Du kannst mal zur Sicherheit deine Temp Variablen mit $temp*1 ausführen lassen, dann bist zu sicher das es sich um eine numerischen Wert handelt.

Oder der Variablen den richtigen Datentyp zuweisen.
Gruß

Michael
Benutzeravatar
Sprite01
Beiträge: 867
Registriert: Fr 8. Jan 2010, 22:04
Wohnort: Dessau
Kontaktdaten:

Re: Langzeitwerte in mysql speichern

Beitrag von Sprite01 »

Michael hat geschrieben:Du kannst mal zur Sicherheit deine Temp Variablen mit $temp*1 ausführen lassen ...
Aber das bringt mir dann ja außer einer Fehlermeldung auch nichts ?
Michael hat geschrieben:Oder der Variablen den richtigen Datentyp zuweisen.
Du meinst allen Variablen ein $variable = (int) "$variable"; verpassen ?
Antworten