0

我有一个我正在尝试解决的问题。我在互联网上搜索,但没有任何帮助。我有多组复选框,我想获取它们的值并将它们传递到数据库中。问题是只有 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;     
    }
}

任何人都可以帮忙吗?我想不通……

4

1 回答 1

1

2个错误:

1) 在您的 PHP 中,您检查复选框的值是否为1,但在您的 HTML 中,复选框的值为1, 2, 3, 41因此,要么在 HTML中将复选框的值全部设置为,要么14PHP 中进行检查 - 取决于您想要什么以及您决定如何解决第二个错误。

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

其他提示:

  • 使用print_r($_POST);所以查看实际发布到 PHP 脚本的内容 - 使调试更容易。
  • 不要@用来抑制错误/通知:它很慢。这是糟糕的编码(应该避免错误,应该注意通知 - 而不是压制它们)。
于 2012-07-31T09:23:22.747 回答