2012-04-05 14 views
0

私のINSERT VALUESに問題があります。問題は、質問番号を挿入しようとするときです。 2つの質問を挿入しようとします。最初の質問では質問番号(QuestionId)は1でなければならず、2番目の質問では2でなければなりません。エコーに正しい番号が表示されない

しかし問題は、INSERT VALUESの両方の質問に質問番号3が表示されることです。だから、すべての質問のために何をしているのかは、この例ではすべての質問に対して「3」である次の質問番号を挿入することです。

INSERT INTO Question (QuestionId, QuestionContent) VALUES ('3','what is my name'), ('3','what is my age') 

上記が正しくありません:以下

はそれが私は2つの質問のための$ questionsqlをエコー現時点で表示しているものの一例です。以下は、それが反響をすべきかです:

INSERT INTO Question (QuestionId, QuestionContent) VALUES ('1','what is my name'), ('2','what is my age') 

だから私は、私はそれぞれの質問に対して正しい質問番号を表示することができますどのように、それは質問1、2から正しい順序で正しい質問番号を追加する必要がありますされて知りたいです、3など

以下は、テーブル行に質問を追加するjavascriptコードとフォームコードです。ユーザーは、テーブル行に質問を追加します。ユーザは、最初の質問を追加するときには、質問番号1を追加し、以下の質問、彼らは2番目の質問を追加するとき、それは質問番号2及び質問を追加等

<script> 

    function insertQuestion(form) { 

    var $tbody = $('#qandatbl > tbody'); 
    var $tr = $("<tr class='optionAndAnswer' align='center'></tr>"); 
    var $qid = $("<td class='qid'>" + qnum + "</td>"); 
    var $question = $("<td class='question'></td>"); 


    $('.questionTextArea').each(function() { 

    var $this = $(this); 
    var $questionText = $("<textarea class='textAreaQuestion'></textarea>").attr('name',$this.attr('name')+"[]") 
        .attr('value',$this.val()) 

    $question.append($questionText); 

    }); 

    $tr.append($qid); 
    $tr.append($question); 
    $tbody.append($tr); 

    } 

    ++qnum; 
    $(".questionNum").text(qnum); 
    $(".num_questions").val(qnum); 

</script> 


<form id="QandA" action="insertQuestion.php" method="post" > 

<table id="question"> 
<tr> 
    <th colspan="2"> 
     Question Number <span class="questionNum">1</span> 
     <input type="hidden" class="num_questions" value="" name="numQuestion"> 
    </th> 
</tr> 
<tr> 
    <td rowspan="3">Question:</td> 
    <td rowspan="3"> 
     <textarea class="questionTextArea" rows="5" cols="40" name="questionText"></textarea> 
    </td> 
</tr> 
</table> 

</form> 

は、それが値を挿入PHPコードです。 numQuestionを正しく表示するにはどうしたらいいですか?私は2回目の試験で質問を作成した後、2回目の試験で2回の試験を受けるかもしれないという事実のために、単純なカウントループを行うことができません。再度 '1'で始まる質問番号が必要です。 'numQuestion'を表示します。

$i = 0; 
$c = count($_POST['gridValues']); 

$insertquestion = array(); 

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

    switch ($_POST['gridValues'][$i]){ 

    case "3": 
    $selected_option = "A-C"; 
    break; 

    case "4": 
    $selected_option = "A-D"; 
    break; 

    default: 
    $selected_option = ""; 
    break; 

    }  

    $optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '". mysql_real_escape_string($selected_option)."')"; 
    $optionrs = mysql_query($optionquery); 
    $optionrecord = mysql_fetch_array($optionrs); 
    $optionid = $optionrecord['OptionId']; 

    $insertquestion[] = "'". 
        mysql_real_escape_string($_POST['numQuestion']) ."','". 
        mysql_real_escape_string($_POST['questionText'][$i]) ."','". 
        mysql_real_escape_string($optionid) ."'"; 

} 

$questionsql = "INSERT INTO Question (SessionId, QuestionId, QuestionContent, QuestionMarks, OptionId) 
    VALUES (" . implode('), (', $insertquestion) . ")"; 

echo($questionsql); 


mysql_close(); 

+0

質問IDは自動インクリメントですか?それは主キーですか? –

+0

questionIdはコンポジットキーですが、自動インクリメントしたくありません。私は実際にはnumQuestionの値を取得したいだけです。自動インクリメントを忘れて、numQuestionの値を取得する方法を教えてください。 – user1309180

+0

($ i = 0; $ i ++)の場合、条件文がありません。 –

答えて

0

あなたはこれらの質問の番号を生成するために持っていけません。データベース内の自動インクリメントシーケンスを使用してみてください。あなたはここでいくつか混乱しています。データベースには、フロントエンド内のテーブルの番号とは異なる固有の識別子が必要です。また、異なる質問で異なる試験がある場合は、2つのテーブル、1つは試験を保持し、もう1つは自動増分IDとそれが所属する試験を参照する外部キーで質問を保持する必要があります。このシナリオでは、質問IDをコミットする必要はありませんが、質問名(および照会参照)のみを照会するだけで、データベースによってIDが生成されます。あなたのテーブルの質問カウント値はあなたのデータベースIDから独立している必要があります。

0

それが主キーである場合、それは自動的に質問にIDを割り当てます。この

INSERT INTO Question (QuestionContent) VALUES ('what is my name'), ('what is my age') 

のようなものであるとして、そのフィールドを残します。 表示するデータを取得したら、単に変数を使用して質問番号を生成することができます。あなたは質問番号としてIDを使用しないでください。

関連する問題