A trick to get consistent checkbox form values


HTML form checkboxes have a rather frustrating quirk when it comes to processing their post data. If the box is unchecked, rather than submit a value of false or zero, browsers will just not post any data at all.

When using PHP to parse post data, this means you can’t just blindly access $_POST['my_checkbox'] without risking throwing an ‘undefined index’ notice.

I just came across a trick to get around this annoyance. Right before your checkbox input, include a hidden input with the same name set to 0 like so:

<input name='my_checkbox' type='hidden' value='0' />
<input name='my_checkbox' type='checkbox' value='1' />

If the checkbox is checked, it will override the hidden input, but if it’s left unchecked, the hidden input’s 0 value will be submitted.