2013-01-02 62 views
3

我很努力地插入數據並能夠從db中選擇AnswerId。這是林試圖做:如何插入數據並能夠檢索id(mysqli/php)

下面是一個表我現在有作爲一個例子:

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

從查詢結果上面實際上有其自己的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 

回答

0

你是下面的查詢不綁定值,

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

編輯:這裏是manual。它需要這樣的事情,

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

是的,這是我與掙扎的情況下,應該在參數是在bind_param()爲了什麼才能夠正確的數據插入到「AnswerId」和「 AnswerMarks「? – user1881090

+0

也是正確的SELECT查詢,以便能夠爲每個答案找到AnswerId? – user1881090

+0

我編輯了我的答案。 –

相關問題