0

INSERTVALUESに問題があります。問題は、質問番号を挿入しようとしたときです。2つの質問を挿入しようとしましょう。最初の質問の場合、質問番号(QuestionId)は1で、2番目の質問の場合は2である必要があります。

しかし、問題は、値を挿入すると、両方の質問に質問番号3が表示されることです。したがって、すべての質問に対して実行しているのは、次の質問番号を挿入することです。この例では、すべての質問に対して「3」です。

以下は、2つの質問に対して$questionsqlをエコーし​​たときに表示されているものの例です。

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

上記は正しくありません。以下は、エコーする必要があるものです。

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番目の試験では、質問番号を「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();

4

2 に答える 2

0

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

于 2012-04-05T13:32:22.973 に答える
0

主キーの場合は、フィールドをそのままにしておきます

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

ID が質問に自動的に割り当てられます。表示するデータを取得したら、単純に変数を使用して質問番号を生成できます。id を質問番号として使用しないようにする必要があります。

于 2012-04-05T13:36:19.573 に答える