2014-04-12 165 views
0

我試圖讓我的複選框,如果複選框未選中,它將保存爲一個空白(跳到下一個)(「」)/選項卡(「\ t」)我的.txt文件並至少1box檢查。這是我的代碼:PHP複選框,未選中框選項

我的HTML

<p>Hobbies: 
    <input type="checkbox" name="ahobby[]" value="swimming" />Swimming 
    <input type="checkbox" name="ahobby[]" value="reading" />Reading 
    <input type="checkbox" name="ahobby[]" value="gaming" />Playing Games 
</p> 

和我的PHP

至少1框打勾:

如果(isset($ _ POST [ 「ahobby」]) || empty($ _ POST [「ahobby」])){

$err_msg .= "<p>Please select your Hobby</p>"; 

}

這下保存對不打勾爲空白/選項卡,然後到下一個項目

$check_ary = array ("swimming", "reading", "gaming"); 

$h = 0; 

for ($i = 0; $i < count($check_ary);$i++) { 

    if ($check_ary[$i] == $ahobby[$h]) { 

     fwrite($handle, "$ahobby[$h]\t"); 

     $h++; 

    } else { // saves a blank 

     fwrite($handle, "\t"); 

    } 

} 

// to the next line by using new line 
fwrite($handle, "\n"); 

fclose ($handle); 

的時候我沒有選擇的第三個複選框(遊戲)出現該問題的複選框,它說未定義偏移:1,如果我加厚第三盒/ 3(遊戲)& 1(游泳)/ 3(遊戲)& 2(閱讀),根本沒有問題。而不是創建一個新行(\ n),它只是創建一個新標籤。 任何人都有一些答案?謝謝!

回答

0

您可以考慮把你的代碼在一個if條件是這樣的:

 $check_ary = array ("swimming", "reading", "gaming"); 
    $check_empty = 0; 

    for ($i = 0; $i < count($check_ary);$i++) { 

     if (isset($ahobby[$i])) { 

      if ($check_ary[$i] == $ahobby[$i]) { 

       fwrite($handle, "{$ahobby[$i]}\t"); 

      } 
     } else { 
      // Keeps track of the empty checkboxes; 
      $check_empty++;       
     } 

     if ($check_empty >= 3) { 
       fwrite($handle, "\t"); 
     } 

    } 
+0

它的工作原理,但唯一的問題是,當我選擇只有第二和第三/選擇沒有第一個陣列(游泳),它不會將值寫入我的.txt文件。任何建議?感謝您的幫助 –

+0

這是因爲兩個數組的值(即ahobby和check_ary)不匹配,因爲當您開始選擇「reading」時,數組「$ ahobby」的索引從0開始「$ check_ary [0]」的值爲「游泳」作爲其值。 – Vagabond

+0

解決方法可以是以靜態方式獲取輸入複選框值的名稱(即 Swimming' ahobby [1]閱讀等) – Vagabond