2015-07-27 33 views
5

Tuhaf bir sorum var ve neyin yanlış olduğunu bilmiyorum. Amerika Birleşik Devletleri'nin etkileşimli bir haritasını kodluyorum. Kullanıcı bir durumu tıklar ve tıklama bir metin dosyasına kaydedilir. Daha sonra, toplam tıklamaların sayısı haritada gösterilir. Temel olarak tam bir veritabanı etrafında hızlı bir çözümdür.Metin dosyasına ilk madde tıklanmadıysa işe yaramaz.

Kod çalışıyor. Bir durumu tıklattığınızda, metin dosyasına eklenir. Devlet henüz mevcut değilse, bunun için bir giriş yapılır. Eğer varsa, tıklamaların sayısı basitçe güncellenir. İşte dosyasıdır:

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

?> 

Ben sorun kodu devlet ilk devlettir, metin dosyası boş yani kullanıcı bir devlet tıklar (tıklandığında İLK devlet dışındaki tüm ülkeler için çalışır olmasıdır). Bu durumda, başlangıçta tıklanan durumu hiçbir zaman güncellemez, sadece bir grup kişisel giriş oluşturur. O (Ben ilk Pennsylvania tıklandığında varsayarak) bu görünümü kazanıyor: ...

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 

Ben bunu neden emin değilim, bu yüzden bariz bir şey işaret edebilir taze bir çift göz umuyorum ben if($strpos= strpos(file_get_contents($file), $state)){ satırında ifade ile ilgili bir duygu var, ama emin olamıyorum. Kodun her şey için% 100 doğru çalıştığı, ancak tıklattığınız ilk durum için garip bir problem gibi görünüyor. Sadece ilk devlet olduğunu biliyorum çünkü ilk defa olarak farklı devletlerle defalarca denedim.

Herhangi bir fikir veya öneriniz var mı? Eğer dize olup olmadığını görmek için strpos kullandığınızda, boolean karşı kontrol gerektiğine

+1

biri bugün:

Kodunuzda sizin gibi yaklaşabilir. –

+0

$ strpos ... değerini başarıyla ayarlayıp ayarlayamayacağınızı kontrol edersiniz; – SophieXLove64

+0

hiç bir harf büyüklüğü sorunu olabileceğini düşündü mü? Bu durumda burada 'stripos' deneyin, bu durumda duyarsızlık içindir. –

cevap

5

Not: strpos senin durumunda olduğu gibi 0 döndüğünde

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

Eğer yanlış bir negatif olacaktır. Birkaç iyi oluşturulmuş sorulardan

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