3
我很努力地插入數據並能夠從db中選擇AnswerId。這是林試圖做:如何插入數據並能夠檢索id(mysqli/php)
下面是一個表我現在有作爲一個例子:
我去的上述資料的細節(除了「標誌每答」欄目)從下面的查詢:
$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
";
查詢結果:
從查詢結果上面實際上有其自己的AnswerId在「回答」表,這導致每個答案是以下:
下面是表示上述表是如何製造的視圖源代碼:
<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
是的,這是我與掙扎的情況下,應該在參數是在bind_param()爲了什麼才能夠正確的數據插入到「AnswerId」和「 AnswerMarks「? – user1881090
也是正確的SELECT查詢,以便能夠爲每個答案找到AnswerId? – user1881090
我編輯了我的答案。 –