0

解決しようとしている問題があります。インターネットで検索しましたが、何も役に立ちませんでした..チェックボックスのグループが複数あり、それらの値を取得してdbに渡したいです。問題は、グループの最初のチェックボックスだけが正しい値を取得することです。これが私のコードです:

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 では、チェックボックスの値は123です4。したがって、HTMLでチェックボックスの値をすべて設定するか、PHPで1チェック1スルー4します-必要なものと2番目の間違いを解決する方法に応じて。

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 に答える