0

次のように生成するチェックボックス値がいくつかあります

$sql = "sql statement";
$courseResult = mysqli_query($connection, $sql);
$courses = mysqli_fetch_row($
// Display the courses the user has taken 
while ($courses) {
    echo "<td><input type='checkbox' name='coursesToAdd[]' id='coursesToAdd[]' value='$courses[0]'>$courses[0]</td></tr>";            
    $courses = mysqli_fetch_row($courseResult);
}

<input type='button' onclick='EditStudentCertificates()' value='Submit'/>

私がやりたいのは、ユーザーが配列にチェックインする値を取得し、そのようにしようとしていたjavascriptからこの配列にアクセスすることですが、機能していないようです。

        function EditStudentCertificates(){                
            if (window.XMLHttpRequest){
                // code for IE7+, Firefox, Chrome, Opera, Safari                
                xmlhttp=new XMLHttpRequest();
            }
            else{
                // code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }      

            var coursesToAddField = document.getElementById("coursesToAdd[]");
            var coursesToAdd = coursesToAddField ? coursesToAddField.value : '';

            xmlhttp.open("POST","updateStudentCInfo.php",true);
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xmlhttp.send("certValue="+certValue+"&coursesToAdd="+coursesToAdd);
            window.alert("Your certificate information has been updated");
            window.location.reload();                
        }

私が問題だと思うのは、JavaScriptのチェックボックスから値を取得しようとしている方法にあるものであり、おそらく次のようなものです。

            var coursesToAddField = document.getElementById("coursesToAdd[]");
            var coursesToAdd = coursesToAddField ? coursesToAddField.value : '';

変数coursesToAddは、送信を押す前にページでチェックしたチェックボックスの数に関係なく、ページの最初のチェックボックスの値以外は何も保持していないように見えるためです。

4

3 に答える 3

1

上記のコメントで述べたように:

投稿した AJAX コードを見なくても、チェックボックスから値を取得する方法に問題があります。coursesToAdd[]すべてのチェックボックスに同じ ID を使用しています。すべての ID はページ上で一意である必要があるため、これは無効です。代わりにクラス名を使用する必要があります。

HTML/PHP で:

while ($courses) {
    echo "<td><input type='checkbox' name='coursesToAdd[]' class='coursesToAdd' value='$courses[0]'>$courses[0]</td></tr>";            
}

JS では、次のようにチェックボックスにアクセスできます。

var courseCheckboxes = document.getElementsByClassName("coursesToAdd");
for (var i=0; i < courseCheckboxes.length; i++) {
    if (courseCheckboxes[i].checked) {
       // do something with the checkbox
    }
}
于 2012-12-07T17:20:16.177 に答える
0

あなたはそれを非同期にしています。したがって、onreadystatechange イベントを利用する必要があります。

試す:

xmlhttp.onreadystatechange = function(){
    window.location.reload();       
}

そして、location.reload() を削除します

于 2012-12-07T11:23:41.230 に答える
0

POST を通過する値が複数ある場合は、encodeURIComponent(variablename)

于 2012-12-07T11:30:14.777 に答える