如何插入数据并能够检索到id (mysqli/php)

3
我正在努力插入数据并能够从数据库中选择AnswerId。以下是我尝试做的事情:
下面是我目前拥有作为示例的表格: enter image description here 我从以下查询中获取了上述细节(除了“每个答案的分数”列):
   $query = "SELECT q.SessionId, s.SessionName, q.QuestionId, q.QuestionContent, an.Answer, q.QuestionMarks 
   FROM Session s 
   INNER JOIN Question q ON s.SessionId = q.SessionId
   JOIN Answer an ON q.QuestionId = an.QuestionId AND an.SessionId = q.SessionId
   WHERE s.SessionName = ?
   ORDER BY q.QuestionId, an.Answer
   ";

查询结果:

enter image description here

上述查询结果中的每个答案在“Answer”表中都有自己的AnswerId,以下是该表的查询结果:

enter image description here

以下是查看源代码的方式,显示上述表格是如何制作的:

<table border='1' id='markstbl'>
<thead>
<tr>
<th class='questionth'>Question No.</th>
<th class='questionth'>Question</th>
<th class='answerth'>Answer</th>
<th class='answermarksth'>Marks per Answer</th>
<th class='totalmarksth'>Total Marks</th>
<th class='noofmarksth'>Marks Remaining</th>
</tr>
</thead>
<tbody>

<tr class="questiontd">
        <td class="questionnumtd q1_qnum" name="numQuestion" rowspan="3">1 <input type="hidden" name="q1_ans_org" class="q1_ans_org" value="4"><input type="hidden" name="q1_ans" class="q1_ans" value="4"></td>
    <td class="questioncontenttd" rowspan="3">Here are 3 answers </td>
    <td class="answertd" name="answers[]">B</td>
<td class="answermarkstd">
<input class="individualMarks q1_mark"  q_group="1" name="answerMarks[]" type="text" data-type="qmark" data-qnum="1" onkeypress="return isNumberKey(event)" maxlength="3" />
</td>
<td class="totalmarkstd" rowspan="3">4</td>
<td class="noofmarkstd q1_ans_text"  q_group="1" rowspan="3"><strong>4</strong></td>
</tr>

<tr class="questiontd">
    <td class="answertd" name="answers[]">D</td>
<td class="answermarkstd">
<input class="individualMarks q1_mark"  q_group="1" name="answerMarks[]" type="text" data-type="qmark" data-qnum="1" onkeypress="return isNumberKey(event)" maxlength="3" />
</td>
</tr>

<tr class="questiontd">
    <td class="answertd" name="answers[]">F</td>
<td class="answermarkstd">
<input class="individualMarks q1_mark"  q_group="1" name="answerMarks[]" type="text" data-type="qmark" data-qnum="1" onkeypress="return isNumberKey(event)" maxlength="3" />
</td>
</tr>

<tr class="questiontd">
        <td class="questionnumtd q2_qnum" name="numQuestion" rowspan="2">2 <input type="hidden" name="q2_ans_org" class="q2_ans_org" value="6"><input type="hidden" name="q2_ans" class="q2_ans" value="6"></td>
    <td class="questioncontenttd" rowspan="2">What 2 speeds can you do in a carriageway (single and dual) </td>
    <td class="answertd" name="answers[]">A</td>
<td class="answermarkstd">
<input class="individualMarks q2_mark"  q_group="1" name="answerMarks[]" type="text" data-type="qmark" data-qnum="2" onkeypress="return isNumberKey(event)" maxlength="3" />
</td>
<td class="totalmarkstd" rowspan="2">6</td>
<td class="noofmarkstd q2_ans_text"  q_group="1" rowspan="2"><strong>6</strong></td>
</tr>

<tr class="questiontd">
    <td class="answertd" name="answers[]">C</td>
<td class="answermarkstd">
<input class="individualMarks q2_mark"  q_group="1" name="answerMarks[]" type="text" data-type="qmark" data-qnum="2" onkeypress="return isNumberKey(event)" maxlength="3" />
</td>
</tr>
</tbody>
</table>

<p>
<input type='hidden' id='num_groups' name='num_groups' value='2'>
<input id="submitBtn" name="submitMarks" type="submit" value="Submit Marks" />
</p>

</form>

我遇到的问题是插入数据。我想向“Individual_Answer”表中的“AnswerId”和“AnswerMarks”表中插入数据,以便我们知道每个答案值多少分。因此,在提交顶部表格并插入后,数据库表应如下所示:

Individual_Answer 表:

AnswerId  AnswerMarks
295       2
296       1
297       1
298       3
299       3

我似乎无法弄清楚如何首先检索每个答案的“AnswerId”,然后能够将数据插入数据库。以下是我的尝试,但我的问题是,是否有人可以修复下面的代码,以便能够正确地检索“AnswerId”,然后正确地插入数据?

以下是我的尝试(我正在使用mysqli / php):

        <?php

 // connect to the database
 include('connect.php');

  /* check connection */
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    die();
  }

var_dump($_POST);  

 $answersql = "INSERT INTO Individual_Answer (AnswerId, AnswerMarks) 
    VALUES (?, ?)";

if (!$insertanswer = $mysqli->prepare($answersql)) {
    // Handle errors with prepare operation here
    echo __LINE__.': '.$mysqli->error;
}



//make sure both prepared statements succeeded before proceeding
if($insertanswer)
{
    $sessid =  $_SESSION['id'] . ($_SESSION['initial_session'] > 1 ? $_SESSION['sessionCounting'] : '');
   $c = count($_POST['numQuestion']);

    for($i = 0;  $i < $c; $i++ )
    {

$answerquery = "SELECT AnswerId FROM Answer WHERE (SessionId = ? AND QuestionId = ? and Answer = ?)";

    if (!$answerstmt = $mysqli->prepare($answerquery)) {
  // Handle errors with prepare operation here
  echo __LINE__.': '.$mysqli->error;
}

// Bind parameter for statement
$answerstmt->bind_param("iis", $sessid, $_POST['numQuestion'][$i], $_POST['answers'][$i]);

// Execute the statement
$answerstmt->execute();

            if ($answerstmt->errno) 
            {
                // Handle query error here
                echo __LINE__.': '.$answerstmt->error;
                break 1;
            }

// This is what matters. With MySQLi you have to bind result fields to
// variables before calling fetch()
$answerstmt->bind_result($dbAnswerId);

// This populates $optionid
$answerstmt->fetch();

$answersql->bind_param('ii', $dbAnswerId, $_POST['answers'][$i]);

    $answerstmt->close();

}
    //close your statements at the end


    $insertanswer->close();
}

?>

var_dump($_POST)显示如下内容:

array(7) { 
["q1_ans_org"]=> string(1) "4" 
["q1_ans"]=> string(1) "0" 
["answerMarks"]=> array(5) 
{ 
[0]=> string(1) "2" 
[1]=> string(1) "1" 
[2]=> string(1) "1" 
[3]=> string(1) "3" 
[4]=> string(1) "3" } 
["q2_ans_org"]=> string(1) "6" 
["q2_ans"]=> string(1) "0" 
["num_groups"]=> string(1) "2" 
["submitMarks"]=> string(12) "Submit Marks" 
} 
Notice: Undefined index: numQuestion in ... on line 55 
1个回答

0

您没有将值绑定到以下查询中,

$answersql = "INSERT INTO Individual_Answer (AnswerId, AnswerMarks) 
VALUES (?, ?, ?)";

编辑:这里是手册。它需要像这样的内容,

$answersql->bind_param('ii', $value1, $value2); //Value1, value2 are the values to be inserted.

是的,这就是我正在苦苦挣扎的情况,为了能够将正确的数据插入到“AnswerId”和“AnswerMarks”中,bind_param()中应该是什么参数? - user1881090
此外,为了能够找到每个答案的AnswerId,SELECT查询是否正确? - user1881090
哈哈,抱歉我是说我知道如何使用bind_param(),只是没有在代码中包含它,因为我不知道$value1和$value2应该是什么。这就是我的意思,$value1和$value2应该是什么? - user1881090
顺便说一下,我更新了我的问题中的PHP代码,以展示代码的样子和现在var_dump()所发布的内容。 - user1881090

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接