Variablenvergleich liefert (willkürlich ab & an), falsches Ergebnis

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Variablenvergleich liefert (willkürlich ab & an), falsches Ergebnis

    Hallo allerseits,

    ich hab hier ein Verständnisproblem beim Vergleichen zweier Variablen. Es geht um einen Klickzähler, der die Seitenaufrufe in Abhängigkeit des Datums zählt.

    Die Textdatei ist folgendermaßen aufgebaut:
    1111|25.09.2007
    3533|26.09.2007
    4424|27.09.2007

    Aus dieser lese ich die einzelnen Datumswerte heraus und vergleiche mit dem heutigen Datum. Wenn das heutige Datum schon in der DB vorhanden ist, erhöht sich der Zähler bei diesem um 1, ansonsten wird das neue Datum mit Anfangswert 1 eingetragen.

    Das Ganze klappt vom Prinzip her einwandfrei, nur gibts ein-zweimal am Tag einen Aussetzer und das schon in der DB vorhandene Datum wird nicht erkannt, stattdessen wird das heutige Datum erneut eingetragen, so dass es zweimal vorhanden ist.

    Ich hab das Ganze so gelöst, daß die Zähler von doppelt vorhandenen Datumswerten addiert werden, frage mich aber trotzdem, wieso ab und an Datum nicht gleich Datum ist.

    Hier mal der relevante Codeschnipsel:

    PHP-Code:
     $heute=(date ("d.m.Y"));
     
    $heute_dbfile("iplog/heute.dat");
       foreach(
    $heute_db as $zeile) {
        list (
    $hzahl$hdatum)=explode("|",$zeile);
        
    $hdatum preg_replace("/\r|\n/s"""$hdatum);
        
    $hdatumtrim ($hdatum);
         if (
    $hdatum == $heute)   {
          
    $treff="ja";
         }
      }
      
    $zahl="1";
       if(
    $treff == "ja") {    
        
    $aenderung=file("iplog/heute.dat");
         
    $swap=array();
          foreach(
    $aenderung as $zeile1) {
           list (
    $zahl$datum)=explode("|",$zeile1);
          
    $datum preg_replace("/\r|\n/s"""$datum);
          
    $datum=trim ($datum);
            if (
    $datum == $heute) {
             
    $zahl++;
             
    array_push($swap,"$zahl|$datum\n");
            }
            else {
             
    array_push($swap,"$zahl|$datum\n");
            }
           
    $dat=fopen("iplog/heute.dat",w);
           
    flock ($dat2);
           
    $ende=implode("",$swap);
           
    fwrite($dat,$ende);
           
    flock ($dat3);
           
    fclose($dat);
          }
        }
      else  {
       
    $dat=fopen("iplog/heute.dat","a++"); 
       
    flock ($dat2);
       
    fputs ($dat,"$zahl|");
       
    fputs ($dat,"$heute");
       
    fputs ($dat,"\n");
       
    flock ($dat3);
       
    fclose($dat);
      } 
    Wäre nett, wenn jemand helfen und mir das Phänomen erklären könnte, hab scheinbar einen Knoten im Hirn ;-)

  • #2
    Denk doch mal nach.

    Was passiert bei zwei fast gleichzeitigen aufrufen?

    Kommentar


    • #3
      Verpass der Datumsspalte ein UNIQUE und mach ein INSERT INTO ... ON DUPLICATE KEY UPDATE ...
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4


        Die Textdatei

        Kommentar


        • #5
          Danke erstmal für die schnellen Antworten

          Verpass der Datumsspalte ein UNIQUE und mach ein INSERT INTO ... ON DUPLICATE KEY UPDATE ...
          Ich hab in diesem Fall leider nur Textdatenbanken zur Verfügung, ist ja das Dumme

          Denk doch mal nach. Was passiert bei zwei fast gleichzeitigen aufrufen?
          Hab auch schon vermutet, dass zeitgleiche Zugriffe schuld sind. Aber trotz flock?
          Und eigentlich müßte doch dann die gesamte Datei zerstört werden und sich somit auf Null zurücksetzen?

          Kommentar


          • #6
            Aahh deine DB ist ne Textdatei... Sorry zuerst nicht gerafft...
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              OffTopic:
              Mal den Code angeguckt?!...

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                OffTopic:
                Also wenn man bis zum Problem gelesen hat kann man den geposteten Aufbau der Textdatei eigentlich nicht verpassen.
                Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                Kommentar

                Lädt...
                X