I have an issue that I ‘m trying to solve. I searched in internet but nothing helped me.. I have multiple groups of checkboxes and I want to get their values and pass them in db. The problem is that only the first checkbox of group gets the right value. Here is my code :
Html code :
<tr>
<th>Δημοτικός Κήπος</th>
<td align="center">
<span style="display:none;">
<input type="checkbox" name="place1[]" value="1" id="place1_1"/>
</span>
<img id="Imageplace1_1"
src="unchecked.jpg"
width="35"
height="35"
onclick="CheckBoxClicked('place1_1')"
style="cursor:pointer;"/>
</td>
<td align="center">
<span style="display:none;">
<input type="checkbox" name="place1[]" value="2" id="place1_2"/>
</span>
<img id="Imageplace1_2"
src="unchecked.jpg"
width="35"
height="35"
onclick="CheckBoxClicked('place1_2')"
style="cursor:pointer;"/>
</td>
<td align="center">
<span style="display:none;">
<input type="checkbox" name="place1[]" value="3" id="place1_3"/>
</span>
<img id="Imageplace1_3"
src="unchecked.jpg"
width="35"
height="35"
onclick="CheckBoxClicked('place1_3')"
style="cursor:pointer;"/>
</td>
<td colspan="2" align="center">
<span style="display:none;">
<input type="checkbox" name="place1[]" value="4" id="place1_4"/>
</span>
<img id="Imageplace1_4"
src="unchecked.jpg"
width="35"
height="35"
onclick="CheckBoxClicked('place1_4')"
style="cursor:pointer;"/>
</td>
</tr>
php code :
if(isset($_POST['answeres'])) {
$place1[0] = (@$_POST['place1'][0]=='1')? $_POST['place1'][0]:'0';
$place1[1] = (@$_POST['place1'][1]=='1')? $_POST['place1'][1]:'0';
$place1[2] = (@$_POST['place1'][2]=='1')? $_POST['place1'][2]:'0';
$place1[3] = (@$_POST['place1'][3]=='1')? $_POST['place1'][3]:'0';
echo $place1[0]; //I get 1 if checked 0 if unchecked
echo $place1[1]; //I get 0 all the time
echo $place1[2]; //I get 0 all the time
echo $place1[3]; //I get 0 all the time
}
javascript code :
var CheckBoxCheckedImage = new Image();
var CheckBoxUncheckedImage = new Image();
CheckBoxCheckedImage.src = "checked.jpg";
CheckBoxUncheckedImage.src = "unchecked.jpg";
function CheckBoxClicked(CheckBoxid) {
if(document.getElementById(CheckBoxid).value == "on"){
//if(document.getElementById(CheckBoxid).checked) {
document.getElementById(CheckBoxid).checked = false;
document.getElementById("Image"+CheckBoxid).src = CheckBoxUncheckedImage.src;
}
else{
document.getElementById(CheckBoxid).checked = true;
document.getElementById("Image"+CheckBoxid).src = CheckBoxCheckedImage.src;
}
}
Can anyone help? I can’t figure it out….
2 Mistakes:
1) In your PHP you check if the value of the checkbox is
1or not, but in your HTML the values of the checkboxes are1,2,3,4. So either you set the checkboxes’ values all to1in your HTML or you check against1thru4in your PHP – depending on what you want and how you decide to solve your 2nd mistake.2) When checkboxes are posted only those checkboxes are part of the
$_POSTarray that are checked. This means that$_POST['place1'][0]will be the first checked checkbox and not necessarily the first checkbox in the form with that name. You can solve this by using keys in the checkbox-name (name="place1[0]",name="place1[1]"and so on) or by using different values for each checkbox and checking against the values instead of against the keys (hints: look atin_array(),array_values())Other hints:
print_r($_POST);so see what actually is posted to the PHP script – makes debugging a lot easier.@to supress errors/notices: It’s slow. It’s bad coding (errors should be avoided, notices should be taken care of – instead of supressing them).