3

セッションIDと学生のセットをデータベースに挿入したいと思います。

セッションIDは、以下のコード行にあります。

<td><input type='hidden' id='currentId' name='Idcurrent' readonly='readonly' value='4' /> </td>

学生のセットは、次のように選択ボックスに表示されます。

<select id="studentadd" name="addtextarea">
<option value='1'>u08743 - Joe Cann</option>
<option value='4'>u03043 - Jill Sanderson</option>
<option value='7'>u08343 - Craig Moon</option>
</select>

現在、ajaxを使用してsessionId値と学生の値の両方を取得し、以下のコードを使用して挿入が行われる別のphpページに投稿しています。

 function submitform() {    

    $.ajax({
        type: "POST",
        url: "updatestudentsession.php",
data: { 
    Idcurrent:  $('#currentid').val(),
    addtextarea:$('#studentadd').val()
        },
        dataType:'json',  //get response as json
        success: function(result){
                    if(result.errorflag){

      $("#targetdiv").html('success');  

    }else{
       //you got success message

            $("#targetdiv").html('error');

    $('#targetdiv').show();
        }
    }
  });        
}

updatestudentsession.php以下は、挿入を行うことを想定している別のphpファイルです。

$studentid = array();
$studentid[] = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : '';  
$sessionid = (isset($_POST['Idcurrent'])) ? $_POST['Idcurrent'] : '';   

$insertsql = "
INSERT INTO Student_Session
(SessionId, StudentId)
VALUES
(?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}                                       

foreach($studentid as $id)
{    

$insert->bind_param("ii", $sessionid, $id);

$insert->execute();

if ($insert->errno) {
// Handle query error here
}

}

$insert->close();

今私が抱えている問題は、正しいデータをまったく挿入していないことです。とフィールド0の両方に値を挿入します。以下は、挿入後のテーブルの外観です。SessionIdStudentId

SessionId   StudentId
4           1
4           4
4           7

代わりに、次のようになります。

SessionId   StudentId
0           0

私の質問は、正しいデータを取得してデータベースに挿入できない原因は何ですか?

4

2 に答える 2

2

問題の一部がここにあるとします:

Idcurrent:  $('#currentid').val(),

HTML コードの ID はcurrentId、 id を持つ要素を取得しようとしているときですcurrentid。ID セレクターは大文字と小文字を区別します。したがって、jquery は要素を見つけることができないため、PHP には何も渡さないだけです。

の何が問題なのか$studentidわかりませんが、常に 1 つの値しか渡さないため、そこで配列を使用する理由がわかりません。そのため、以下のように php コードを変更してみてください。

$studentid = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : array();  
$sessionid = (isset($_POST['Idcurrent'])) ? $_POST['Idcurrent'] : '';   
//var_dump($studentid);
//var_dump($sessionid);
//var_dump($_POST); - this is additionally to see whole $_POST variable.
$insertsql = "
INSERT INTO Student_Session
(SessionId, StudentId)
VALUES
(?, ?)
";
if (!$insert = $mysqli->prepare($insertsql)) {
// Handle errors with prepare operation here
}                                       


foreach($studentid as $id)
{    
   $insert->bind_param("ii", $sessionid, $id);
   $insert->execute();
   if ($insert->errno) {
      // Handle query error here
   }
} 

$insert->close();

また、冒頭のat コメントアウトされたvar_dump行も参照してください。変数の値が表示されるので、実際に何が設定されているかを確認できます。(これは ajax であるため、開発者ツールを開いて、ネットワーク タブの結果で何が返されるかを確認する必要があります)

更新:

最新のコメントによると$_POST['addtextarea']、配列であると思われます。そのため、コードはそれを処理するように変更されています。その値がどのように取られるかに注意してください。

$studentid = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : array();  

古いコード:

$studentid = array();
$studentid[] = (isset($_POST['addtextarea'])) ? $_POST['addtextarea'] : '';  

2 レベル配列になります。したがって、 $studentid は、配列でもある 1 つの要素を含む配列です。これが、old for each ループが機能しない理由です。$id は配列でした。そしてそれは0に変換されました

于 2013-01-11T09:06:48.023 に答える
0

データに問題があると思います:

data: { 
    Idcurrent:  $('#currentid').val(),
    addtextarea:$('#studentadd').val()
        },

試す :

data: { 
    "Idcurrent":  $('#currentid').val(),
    "addtextarea":$('#studentadd').val()
        },

二重引用符「Idcurrent」は使用しないでください

于 2013-01-11T08:55:34.893 に答える