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()and execute(),您只需要进行一次准备:

为了防止插入零,我还将整个准备好的语句包装在如下内容中:

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 回答