2012-10-15 39 views
0

我将值插入“问题”和“答案”表中。现在的问题表是罚款,如果我插入2个问题,然后它会显示该表所示:为什么在将数据插入数据库时​​会复制答案?

SessionId (PK) QuestionId(Pk) QuestionContent 

RZC    1    Name 2 things you will find with a computer 
RZC    2    Name three things you will find in a toolbox 

但“答案”表原因造成的问题,它复制了答案插入时,该表目前看起来象下面这样:

AnswerId (auto PK) SessionId QuestionId Answer 
1     RZC   1   A 
2     RZC   1   C 
3     RZC   2   A 
4     RZC   2   B 
5     RZC   2   E 
6     RZC   1   A 
7     RZC   1   C 
8     RZC   2   A 
9     RZC   2   B 
10     RZC   2   E 

表应该如下:

AnswerId (auto PK) SessionId QuestionId Answer 
1     RZC   1   A 
2     RZC   1   C 
3     RZC   2   A 
4     RZC   2   B 
5     RZC   2   E 

为什么重复的答案?

下面是PHP和mysqli的代码:

<?php 

    var_dump($_POST); 


    // Prepare your statements ahead of time 
    $questionsql = 'INSERT INTO Question (SessionId, QuestionId, QuestionContent) VALUES (?, ?, ?)'; 
    if (!$insert = $mysqli->prepare($questionsql)) { 
     // Handle errors with prepare operation here 
     echo __LINE__.': '.$mysqli->error; 
    } 

    $answersql = 'INSERT INTO Answer (SessionId, QuestionId, Answer) 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($insert && $insertanswer) 
      { 
       $sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : ''); 
       $c = count($_POST['numQuestion']); 

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

$insert->bind_param('sis', $sessid, $_POST['numQuestion'][$i], $_POST['questionText'][$i]); 

     $insert->execute(); 

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


     $results = $_POST['value']; 
     foreach($results as $id => $value) 
     { 
     $answer = $value; 

     $lastID = $insert->insert_id; 



     foreach($value as $answer) 
     { 
     $insertanswer->bind_param('sis', $sessid, $lastID, $answer); 

     $insertanswer->execute(); 

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

       //close your statements at the end 
       $insertanswer->close(); 
       $insert->close(); 
      } 
      ?> 

后续代码var_dump($ _ POST)显示了这个以下:

array(4) { 
    ["numQuestion"]=> array(2) { 
     [0]=> string(1) "1" 
     [1]=> string(1) "2" 
    } 
    ["questionText"]=> array(2) { 
     [0]=> string(20) "What is 2+2 and 3+3?" 
     [1]=> string(41) "Which three items will you find in a car?" 
    } 
    ["submitDetails"]=> string(14) "Submit Details" 
    ["value"]=> array(2) { 
     [1]=> array(2) { 
      [0]=> string(1) "A" 
      [1]=> string(1) "C" 
     } 
     [2]=> array(3) { 
      [0]=> string(1) "A" 
      [1]=> string(1) "B" 
      [2]=> string(1) "D" 
     } 
    } 
} 
+0

你访问的页面两次? –

+0

什么是'$ insert'和'$ insertanswer'? – Shoe

+0

@Jeffrey Oops忘记复制代码中的插入语句,给我30秒。 – user1701484

回答

3

你有一个循环嵌套问题。如果我的理解正确的话,那就是运行问题和答案。问题是他们应该彼此独立。在你的代码中,相反,foreach在每个问题上运行,导致答案被插入两次。

这应该工作:

​​
+0

因此,我需要在答案之前(在foreach循环之前)移动for循环的右括号? – user1701484

+0

您需要插入问题,关闭所有问题循环,然后**然后**启动回答。 – Shoe

+1

酷欢呼杰弗里:)我可以问一个小问题,是否应该从foreach循环移动$ lastID并移入for循环?这会在“答案”表中为每个答案插入QuestionId,但问题是现在答案表中的QuestionId始终显示“0” – user1701484

相关问题