0

以下では、データベースに値を挿入します。選択したセッション(試験)に各生徒を挿入したいと思います。

ここで、選択したセッションが 34であるとしましょう。私の問題は、選択ボックスに、以下のようにこの評価を受ける予定の複数の学生が含まれているとしましょう。

<select name='addtextarea' id='studentadd'  multiple='multiple' size='10'>
<option value='1'>Joe Blogs</option>
<option value='4'>Bill Kite</option>
<option value='6'>Mary Scott</option>
</select>

私の質問は、各学生をループして、データベースに各学生の詳細を挿入し、挿入時にdbテーブルが次のようになるようにする方法です。

SessionId  StudentId
34         1
34         4
34         6

以下は、mysqli/phpを使用した挿入のコードです。

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

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

        $insert->execute();

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

        $insert->close();
4

1 に答える 1

1

bind_param()とをループするexecute()だけで、準備を1回行うだけで済みます。

ゼロの挿入を防ぐために、プリペアドステートメント全体を次のようにラップします。

if(isset($_POST['addtextarea']) && is_array($_POST['addtextarea']) && count($_POST['addtextarea']) > 0 && isset($_POST['Idcurrent']))
{
    // we have some data to insert, do the prepared stmt

    $insertsql = "
    INSERT INTO Student_Session
    (SessionId, StudentId)
    VALUES
    (?, ?)
    ";

    if ($insert = $mysqli->prepare($insertsql)) {

        foreach($_POST['addtextarea'] as $studentid)
        {
            $insert->bind_param("ii", $_POST['Idcurrent'], $studentid);

            $insert->execute();

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

        $insert->close();
    }
    else
    {
        // prepare() call failed - syntax error in query or error with the db
        // Handle errors with prepare operation here
    }
}
else
{
    // post data is missing, show message
}
于 2013-01-10T17:00:30.467 に答える