|
Posted by Kelsey Sigurdur on 09/08/07 23:33
On Fri, 07 Sep 2007 21:23:29 -0400, Jerry Stuckle wrote:
> Kelsey Sigurdur wrote:
>> On Fri, 07 Sep 2007 13:06:34 -0500, Lorenzo Thurman wrote:
>>
>>> I have a group of checkboxes drawn by javascript and I need to get each
>>> of their states into PHP after submitting the page. I should think I
>>> could get them in a POST, but that fails. Anyone have any ideas?
>>> TIA
>>
>> Use an additional hidden input, with the same name as the checkbox and a
>> value of 0. In almost all cases you'll want the hidden input to appear in
>> the source before the actual checkbox.
>>
>> When the form is submitted, if the checkbox has been checked, it's value
>> will override the hidden input of the same name. If it hasn't been checked
>> the hidden input (with its value of 0) will be in the $_POST array.
>>
>> AFAIK this is the only way to do it as unchecked checkboxes are not passed
>> to POST at all.
>>
>
> Not at all the only way. Your method depends on the order the browser
> sends post data. Sure, they usually send the input fields in the order
> the fields appear in the form, but this is not at all required. A
> change to the browser will break your pages.
>
> A better way is to have a hidden field with the name of the checkbox, i.e.
>
> <input type=hidden name="cbname[]" value="chkbox1">
> <input type=checkbox name="chkbox1">
> ....
> <input type=hidden name="cbname[]" value="chkbox2">
> <input type=checkbox name="chkbox2">
>
> And so on
>
> The names of the checkboxes will now be in the array $_POST['cbname']
> and you can check it with something like:
>
> foreach ($_POST['cbname'] as $cbname) {
> if (isset($_POST[$cbname]))
> echo "Checkbox $cbname is checked<br>\n";
> else
> echo "Checkbox $cbname is NOT checked<br>\n";
> }
>
> This is independent of the order in which the browser sends the form data.
Excellent solution. Thanks!
--
Kelsey Sigurdur
[Back to original message]
|