0

我的插入值有问题。问题是当我尝试插入问题编号时。假设我尝试插入 2 个问题。那么对于第一个问题,问题编号(QuestionId)应该是 1,对于第二个问题应该是 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 个问题和问题等。

<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 代码。

$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

I believe you need to set the value of the form ie. 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 回答
0

您可以将 POST 变量作为数组 ( $_POST['questionText'][$i]) 访问,因为您在这里使用了一个小技巧:

$("<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 回答