0

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

しかし、問題は、INSERT VALUES のときに両方の質問に質問番号 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>

以下は、INSERT VALUES の php コードです。

$i = 0;

$insertquestion = array();

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

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

}

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

    echo($questionsql);
4

3 に答える 3

0

$_POST['questionText'][$i]ここでちょっとしたトリックを使用したので、配列()としてPOST変数にアクセスできます。

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

(行末の;を見逃しました)この行を使用すると、次のようなHTMLが生成されます。

<textarea name="dunnowhat[]"></textarea>
<textarea name="dunnowhat[]"></textarea>
<textarea name="dunnowhat[]"></textarea>
<textarea name="dunnowhat[]"></textarea>

それらの[]を参照してください?それがこれを機能させるものです。しかし、質問番号では、これと同じトリックを使用していません。今、より大きな問題は、あなたが使用したとしても、それは同じではないかもしれません。値をスキップした場合に何が起こるか想像してみてください。POST変数配列に空として表示されない可能性があるため、インデックスごとの質問と質問番号のペアが混乱する可能性があります(配列項目がシフトされます)。

したがって、このトリックを使用する代わりに、名前の間隔を使用することをお勧めします。インデックスカウントを作成し、[]の代わりにそれを追加します。したがって、次のようになります。

<input type="text" name="question-index.1">3</input>
<textarea name="dunnowhat.1"></textarea>
<input type="text" name="question-index.2">5</input>
<textarea name="dunnowhat.2"></textarea>
<input type="text" name="question-index.3">4</input>
<textarea name="dunnowhat.3"></textarea>
<input type="text" name="question-index.4">1</input>
<textarea name="dunnowhat.4"></textarea>

または、さらに簡単に、これらのIDを名前に直接追加します(jqueryを使用)

<textarea name="dunnowhat.3"></textarea>
<textarea name="dunnowhat.5"></textarea>
<textarea name="dunnowhat.4"></textarea>
<textarea name="dunnowhat.1"></textarea>

$ _POST配列でforeachを実行して、キーがで始まるかどうかを確認するとdunnowhat、すべての質問に答えることができます。

しかし、これらすべてでも。MySQLを使用しないのはなぜAUTO_INCREMENTですか?問題全体を解決する質問番号をユーザーが指定する必要がない場合。完全なコードについては...私はそれを書きません、ここで変更するには多すぎます。

于 2012-04-05T02:48:59.030 に答える
0

フォームの値を設定する必要があると思います。value="1"

<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="1" 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>
于 2012-04-05T02:38:14.007 に答える
0

for() ループのコードに構文エラーがあります。このコードは解析されません。それを修正して正しくループしていると仮定すると、問題は $_POST['questionNum'] を挿入している可能性があります。私が見る限り、この変数の値は、個々の質問の数ではなく、質問の総数になります。

代わりに、$i の値だけを使用することもできます。

for($i = 0; $i++; $i < count($_POST['questionText']) ){

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

}
于 2012-04-05T02:43:37.793 に答える