2011-08-22 78 views
0

如何爲每個checkbox選中PHP:如何解決array_combine當一個衣被合計爲空

錯誤一= 0值:

 
Warning: array_combine() [function.array-combine]: Both parameters should have an equal number of elements in 

PHP:

 

$combined = array_combine($_POST['name'], $_POST['day']); 

foreach($combined as $name => $value) { 
    echo $name.' => '.$value; 
} 
 

HTML:

<form method="post" action="result.php"> 
    <p> 
     <input type="text" name="name[]" value="seth" /> 
     <input type="checkbox" name="day[]" value="7" /> 
    </p> 

    <p> 
     <input type="text" name="name[]" value="jack" /> 
     <input type="checkbox" name="day[]" value="4" /> 
    </p> 

    <p> 
     <input type="text" name="name[]" value="david" /> 
     <input type="checkbox" name="day[]" value="3" /> 
    </p> 

</form> 

PS:
我不會用:

 <select name="day[]" size="1"> 
      <option value="0"> Non </option> 
      <option value="1"> Yes </option> 
     </select> 

回答

1

你在這裏。希望這對你有用。那麼你可能希望得到更多的工作。

result.php

<?PHP 

$days = array(); 
$namecount = count($_POST['name']); 
for($i = 0; $i < $namecount; $i++){ 
    $days[$i] = isset($_POST['day'][$i]) ? $_POST['day'][$i] : 0; 
} 

$arr = array_combine($_POST['name'], $days); 
print_r($arr); 

?> 

form.html

<form method="post" action="result.php"> 
    <p> 
     <input type="text" name="name[]" value="seth" /> 
     <input type="checkbox" name="day[0]" value="7" /> 
    </p> 

    <p> 
     <input type="text" name="name[]" value="jack" /> 
     <input type="checkbox" name="day[1]" value="4" /> 
    </p> 

    <p> 
     <input type="text" name="name[]" value="david" /> 
     <input type="checkbox" name="day[2]" value="3" /> 
    </p> 
    <input type='submit' value='Submit' /> 
</form> 
2

您的問題是選中複選框甚至沒有發送到服務器,以便它是你的2個$_POST陣列贏得除非他們全部被檢查,否則不排隊。您應該考慮使用無線電並在name屬性中設置密鑰的值。

即每個輸入做到這一點:

<form> 
<p> 
    <input type="text" name="name[3]" value="david" /> 
    <input type="radio" name="day[3]" value="yes" /> <label>Yes</label> 
    <input type="radio" name="day[3]" value="no" /><label>No</label> 
</p> 
</form> 

然後做print_r($_POST),你會看到你的陣列排隊。另一種方法是做一個隱藏的輸入(具有完全相同的name="",它將作爲一個默認值

+0

的值被髮送'<形式方法= 「POST」 行動= 「....」>': ) – Cheerio

+0

我在說的是,如果用戶不勾選複選框並提交表單,它將不會出現在'$ _POST'數組中。 – Dunhamzzz

+1

@Naiimim Dunhamzzz的意思是,如果一個複選框未被選中,它不包含在發送給服務器的$ _POST請求中,這意味着不是發送一個假值來指示覆選框未被選中,瀏覽器什麼也不發送。 –

0

我能想到的只有3種方式:使用相同的名稱

  1. 移動到<input type=radio> S,這將給你額外的控制通過發送的內容(在先前的答案給出)
  2. 添加另一個輸入,一個隱藏的,<input type=hidden>,它與您的複選框具有相同的名稱,如果未選中複選框,隱藏的輸入值將被髮送(在前面的回答中給出)
  3. 使用JavaScrip t提交您的表單,然後循環選中複選框以手動測試每個選定狀態,然後將其與POST請求一起發送。
相關問題