Having trouble getting my POST arrays to show all checkbox values from my form.
I have a form set up as follows:
<form name='foo' method='post' action=''>
<table>
<tr>
<td class='bla'>Checkbox: <input type='checkbox' name='cBox[]'/></td>
</tr>
<tr>
<td class='bla'>Checkbox: <input type='checkbox' name='cBox[]'/></td>
</tr>
<tr>
<td class='bla'>Checkbox: <input type='checkbox' name='cBox[]'/></td>
</tr>
</table>
</form>
I have a button at the bottom bound to a jquery function that adds 5 more empty rows to the form (hence the arrays for the input name cBox[]).
Now, the problem. Lets say the first checkbox is unchecked, and the last 2 are checked. When I output the values (using PHP print_r for debugging), I will get:
Array ( [0] => on [1] => on)
For some reason, the array does not contain any value for unchecked checkboxes.
I have seen some solutions where a hidden variable is passed with each checkbox, but can this solution be implemented in my situation (using arrays)?
That behavior is not surprising, as the browser doesn’t submit any value for checkboxes that are unchecked.
If you are in a situation where you need to submit an exact number of elements as an array, why don’t you do the same thing you do when there’s an
idof some sort associated with each checkbox? Just include the PHP array key name as part of the<input>element’s name:That still leaves you with the problem that unchecked boxes will still not be present in the array. That may or may not be a problem. For one, you may really not care:
Even if you do care, you can easily correct the problem. Two straightforward approaches here. One, just do the hidden input element trick:
And two, which I find preferable, fill in the blanks from PHP instead:
See it in action.