它不会在回声中显示正确的数字

时间:2012-04-05 13:18:26

标签: php javascript

我的INSERT VALUES有问题。问题是当我尝试插入问题编号时。让我们说我尝试插入2个问题。那么对于第一个问题,问题编号(QuestionId)应为1,对于第二个问题,问题编号应为2。

但问题是,当我插入值时,两个问题都显示问题3。所以它为每个问题做的是插入下一个问题编号,在这个例子中,所有问题都是'3'。

以下是我在回答两个问题的$ 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>

下面是INSERT VALUES的php代码。如何让它正确显示numQuestion。我不能做一个简单的计数循环,因为我可以进行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();

2 个答案:

答案 0 :(得分:0)

你不必生成这些问题数字。尝试在数据库中使用自动增量序列。你在这里混淆了一些事情。您需要在数据库中使用唯一标识符,这与前端表中的数字不同。此外,如果你有不同的考试,不同的问题,你应该有2个表,一个拿着你的考试,一个拿着你的问题,自动增量id和引用它所属的考试的外键。在这种情况下,您不必提交问题ID但只查询问题名称(和考试引用),数据库将生成您的ID。表中的问题计数值需要独立于数据库ID。

答案 1 :(得分:0)

如果它是主键,则保留字段,就像这样

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

它会自动为问题分配ID。 当您获得要显示的数据时,您只需使用变量来生成问题编号。您将不得不避免使用id作为问题编号。