2015-07-27 19 views
5

Ich habe eine seltsame Frage und ich habe keine Ahnung, was los ist. Ich kodiere eine interaktive Karte der Vereinigten Staaten. Der Benutzer klickt auf einen Status und der Klick zeichnet in einer Textdatei auf. Dann wird die Anzahl der Klicks insgesamt auf der Karte angezeigt. Es ist im Grunde ein schneller Workaround um eine vollständige Datenbank.Schreiben in Textdatei funktioniert nicht mit dem ersten geklickt Element

Der Code funktioniert. Jedes Mal, wenn Sie auf einen Status klicken, wird dieser zur Textdatei hinzugefügt. Wenn der Status noch nicht existiert, wird ein Eintrag dafür gemacht. Wenn dies der Fall ist, wird die Anzahl der Klicks einfach aktualisiert. Hier ist die Datei:

<?php 
    // get the input from AJAX 
    @$state = $_GET['state']; 
    // get the txt file where all of the states are 
    $file = 'state_count.txt'; 
     //if state_count.txt exists 
     if($fopen = fopen($file, 'c')){ 
      //open it and check if the name of the state is recorded or not 
      if($strpos= strpos(file_get_contents($file), $state)){ 
       //if so, add 1 to the value after the state's name 
       // in the formate State:# 
       //cut the text file into an array by lines 
       $lines = file($file); 
       //foreach line, parse the text 
       foreach($lines as $l => $k){ 
        // create a new array $strings where each key is the STATE NAME and each value is the # of clicks 
        $strings[explode(':', $k)[0]] = explode(':', $k)[1]; 
       } 
       // add 1 to the # of clicks for the state that was clicked 
       $strings[$state] = $strings[$state]+1; 
       // move cursor to the end of the state's name and add 1 to accomodate the : 
       fseek($fopen, $strpos+strlen($state)+1, SEEK_SET); 
       // overwrite number in file 
       fwrite($fopen, $strings[$state]); 

       // debug print($strings[$state]); 

      } 
      //if not, add it with the value 1 
      else{ 
       file_put_contents($file, $state.":1\n", FILE_APPEND); 
      } 
     } 
     //if does not exist 
     else{ 
      die('Cannot create or open file.'); 
     } 

?> 

Das Problem, das ich habe, ist, dass der Code für alle Staaten außer dem ersten Zustand arbeitet, die angeklickt wird (dh die Textdatei leer ist, Benutzer einen Zustand klickt, dieser Zustand ist der erste Zustand). In diesem Fall wird der anfänglich angeklickte Zustand nie aktualisiert, sondern es werden lediglich eine Reihe einzelner Einträge erstellt. Es endet wie folgt aussehen (vorausgesetzt, dass ich Pennsylvania geklickt zuerst):

Pennsylvania:1 
Pennsylvania:1 
Utah:1 
Colorado:1 
Kansas:1 
Nebraska:1 
Wyoming:1 
Indiana:1 
Ohio:3 
Virginia:1 
West Virginia:2 
Kentucky:8 
Tennessee:1 
Georgia:1 
Alabama:2 
Mississippi:1 
Pennsylvania:1 
Pennsylvania:1 
Pennsylvania:1 
Pennsylvania:1 
Pennsylvania:1 

Ich bin mir nicht sicher, warum es dies tut, so dass ich ein paar frische Augen der Hoffnung, kann offensichtlich etwas hinweisen ... I habe das Gefühl es hat mit der Zeile if Anweisung in if($strpos= strpos(file_get_contents($file), $state)){ zu tun, aber ich kann mir nicht sicher sein. Es scheint ein seltsames Problem zu sein, dass der Code 100% korrekt für alles funktioniert, ABER der erste Zustand, auf den Sie klicken. Ich weiß, dass es der erste Zustand ist, nur weil ich es viele Male mit verschiedenen Zuständen als erstes versucht habe.

Irgendwelche Ideen oder Vorschläge?

+1

einer der wenigen wohlgeformten Fragen heute. –

+0

Sie überprüfen, ob Sie den Wert von $ strpos erfolgreich setzen können ...;) – SophieXLove64

+0

jemals gedacht, dass es sich um ein Groß- und Kleinschreibung Problem handeln könnte? versuchen Sie 'Stripos', wenn das hier der Fall ist, es ist für Groß- und Kleinschreibung. –

Antwort

5

Beachten Sie, dass, wenn Sie strpos verwenden, um festzustellen, ob String vorhanden ist, sollten Sie gegen boolean überprüfen:

if (strpos(....) !== false) { ... } 

sonst werden Sie falsch negativ, wenn Ihr strpos 0, wie in Ihrem Fall zurückgibt.

In Ihrem Code können Sie nähern wie:

$strpos= strpos(file_get_contents($file), $state); 
if ($strpos !== false) {...