复选框组 - 仅第一个更改值

时间:2012-07-31 07:30:14

标签: php javascript html

我有一个问题,我正试图解决。我在网上搜索但没有帮助我..我有多组复选框,我想得到他们的值并在db中传递它们。问题是只有group的第一个复选框才能获得正确的值。这是我的代码:

Html代码:

<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代码:

    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代码:

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;     
    }
}

有人可以帮忙吗?我无法理解......

1 个答案:

答案 0 :(得分:1)

2个错误:

1)在PHP中,检查复选框的值是否为1,但在HTML中,复选框的值为12,{{1 },3。因此,要么在HTML中将复选框的值全部设置为4,要么在PHP中检查11 - 这取决于您的需求以及您决定解决问题的方式错误。

2)当发布复选框时,只有那些复选框是被检查的4数组的一部分。这意味着$_POST将是首先检查复选框,而不一定是具有该名称的表单中的第一个复选框。您可以通过使用复选框名称($_POST['place1'][0]name="place1[0]"等)中的键或使用每个复选框的不同值并检查值而不是键来解决此问题(提示:看起来在in_array()array_values()

其他提示:

  • 使用name="place1[1]",以便查看实际发布到PHP脚本的内容 - 使调试变得更加容易。
  • 不要使用print_r($_POST);来阻止错误/通知:它很慢。这是错误的编码(应该避免错误,应该注意通知 - 而不是压制它们。)