2015-07-27 13 views
5

Ho una domanda strana e non ho idea di cosa non funzioni. Sto codificando una mappa interattiva degli Stati Uniti. L'utente fa clic su uno stato e il clic sta registrando in un file di testo. Quindi il numero di clic totali è mostrato sulla mappa. È fondamentalmente una soluzione rapida attorno a un database completo.La scrittura su file di testo non funziona con il primo elemento cliccato

Il codice funziona. Ogni volta che fai clic su uno stato viene aggiunto al file di testo. Se lo stato non esiste ancora, ne viene fatta una voce. Se lo fa, il numero di clic viene semplicemente aggiornato. Ecco il file:

<?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.'); 
     } 

?> 

Il problema che ho è che il codice funziona per tutti gli stati, eccetto il primo stato che si fa clic (ovvero il file di testo è vuoto, l'utente fa clic su uno stato, quello stato è il primo stato). In questo caso, non aggiorna mai lo stato inizialmente cliccato, ma crea semplicemente un gruppo di singole voci per esso. Si finisce per guardare come questo (supponendo che ho cliccato Pennsylvania prima):

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 

io non sono sicuro perché sta facendo questo, quindi spero un paio di occhi freschi può notare qualcosa di ovvio ... mi avere una sensazione che ha a che fare con la linea se la dichiarazione in if($strpos= strpos(file_get_contents($file), $state)){, ma non posso essere sicuro. Sembra un problema strano che il codice funzioni correttamente al 100% per tutto, MA il primo stato su cui fai clic. So che è il primo stato solo perché l'ho provato molte volte con stati diversi come il primo.

Qualche idea o suggerimento?

+1

una delle poche domande ben formati oggi. –

+0

Si controlla se è possibile impostare correttamente il valore di $ strpos ...;) – SophieXLove64

+0

mai pensato che potrebbe essere un problema di lettere? prova 'stripos' se questo è il caso qui, è per insensibilità al caso. –

risposta

5

Si noti che quando si utilizza strpos per vedere se esiste stringa, si dovrebbe verificare contro booleano:

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

Altrimenti si avrà falso negativo quando i strpos restituisce 0 come nel tuo caso.

Nel codice si può avvicinare come:

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