如何执行循环以插入每个学生的详细信息

时间:2013-01-10 16:47:18

标签: php mysqli

下面我想在数据库中插入值。我想在选定的课程(考试)中插入每个学生。

现在我们可以说选择的会话是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();

1 个答案:

答案 0 :(得分:1)

只需循环bind_param()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
}