How get value for unchecked checkbox in checkbox elements when form posted? How get value for unchecked checkbox in checkbox elements when form posted? arrays arrays

How get value for unchecked checkbox in checkbox elements when form posted?


First way - hidden fields (disadvantage: the user can manipulate the value of the field (but one can manipulate the value of the checkbox too, so it's not really a problem, if you only expect 1 or 0))

<form action="" method="post"><input type="hidden" name="status_1" value="0" /><input type="checkbox" id="status_1" name="status_1" value="1" /><input type="hidden" name="status_2" value="0" /><input type="checkbox" id="status_2" name="status_2" value="1" /><input type="hidden" name="status_3" value="0" /><input type="checkbox" id="status_3" name="status_3" value="1" /><input type="submit" /></form><?phpvar_dump($_POST);/* * checking only the second box outputs: *  * array (size=3)  'status_1' => string '0' (length=1)  'status_2' => string '1' (length=1)  'status_3' => string '0' (length=1) */

Second way - to assign default value for non-set indexes:

<form action="" method="post"><input type="checkbox" id="status_1" name="status_1" value="1" /><input type="checkbox" id="status_2" name="status_2" value="1" /><input type="checkbox" id="status_3" name="status_3" value="1" /><input type="submit" /></form><?phpfor($i = 1; $i<=count($_POST); $i++) {    $_POST["status_$i"] = isset($_POST["status_$i"]) ? $_POST["status_$i"] : 0;}var_dump($_POST);/** * Here we will be checking only the third checkbox: *  * array (size=3)  'status_3' => string '1' (length=1)  'status_1' => int 0  'status_2' => int 0 */


I think adding hidden fields like this will work

<input type="hidden" id="status_1_" name="status_1"  value="0"><input type="checkbox" id="status_1" name="status_1" value="1" /><input type="hidden" id="status_2_" name="status_2" value="0"><input type="checkbox" id="status_2" name="status_2" value="1" /><input type="hidden" id="status_3_" name="status_3" value="0"><input type="checkbox" id="status_3" name="status_3" value="1" />


I thinks it impossible to get array like what you want from html forms. But this some tricks can be used:

$defaultForm = array('status_1' => 0,'status_2' => 0,'status_3' => 0, );// example array from $_POST$form = array('status_1' => 1,'status_3' => 1, );$form = array_merge($defaultForm, $form);

Result:

array(3) {

'status_1' => int(1)
'status_2' => int(0)
'status_3' => int(1)

}