Seite 1 von 2

Langzeitwerte in mysql speichern

Verfasst: Mi 26. Mai 2010, 19:49
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);
}
.
.
.

Re: Langzeitwerte in mysql speichern

Verfasst: Mi 26. Mai 2010, 20:11
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.

Re: Langzeitwerte in mysql speichern

Verfasst: Mi 26. Mai 2010, 21:08
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
.
.
.

Re: Langzeitwerte in mysql speichern

Verfasst: Mi 26. Mai 2010, 21:20
von Michael
Hallo Dirk,

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

Re: Langzeitwerte in mysql speichern

Verfasst: Fr 28. Mai 2010, 13:55
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.

Re: Langzeitwerte in mysql speichern

Verfasst: Sa 29. Mai 2010, 17:52
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____;

Re: Langzeitwerte in mysql speichern

Verfasst: Sa 29. Mai 2010, 18:00
von Michael
Hallo Dirk,

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

Re: Langzeitwerte in mysql speichern

Verfasst: Sa 29. Mai 2010, 18:54
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.

Re: Langzeitwerte in mysql speichern

Verfasst: Sa 29. Mai 2010, 19:25
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.

Re: Langzeitwerte in mysql speichern

Verfasst: Sa 29. Mai 2010, 19:54
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 ?