简体   繁体   中英

group of checkboxes - only the first changes value

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 1 or not, but in your HTML the values of the checkboxes are 1 , 2 , 3 , 4 . So either you set the checkboxes' values all to 1 in your HTML or you check against 1 thru 4 in 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 $_POST array 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 at in_array() , array_values() )

Other hints:

  • use print_r($_POST); so see what actually is posted to the PHP script - makes debugging a lot easier.
  • Do not use @ 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).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM