它只在数据库中正确显示选项

时间:2012-04-03 15:40:27

标签: php

我有一个PHP代码,它使用一个switch语句来查找文本框中的任何值,并输出正确的'optionId',它匹配与文本框中的值匹配的$ selected_option。

我遇到的问题是,让我们说有4个问题,3个问题有不同的选项,1个问题与另一个问题有相同的选项。当我将它们插入数据库时​​,它应该如下所示:

   Question               OptionId

    What is my gender     O17   //case '19'
    What is my name        O3    //case '5'
    What is my address     O17   //case '19'
    What is my age         O7    //case '9'

但相反,它只针对下面的两个问题显示最新的OptionId,这是不正确的。

Question               OptionId

What is my gender      O7
What is my name        O7
What is my address     O7
What is my age         O7

所以我想知道的是为什么它只显示所有问题的最新OptionId?我是否需要循环switch语句,或者循环$ insertQuestion []的方式有问题吗?

    $insertquestion = array();


        $options = $_POST['gridValues'];

        switch ($options){

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

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

            case "5": 
            $selected_option = "A-E";
            break;

            default:
            $selected_option = "";
            break;

        }      


  $optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '". mysql_real_escape_string($selected_option)."')";

$optionrs = mysql_query($optionquery);
    while($optionrecord = mysql_fetch_array($optionrs)){
        $optionid[] = $optionrecord['OptionId'];
    }



foreach($_POST['questionText'] as $question)
{
    $insertquestion[] = "'". mysql_real_escape_string( $_SESSION['id'] ) . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". mysql_real_escape_string( $_POST['num_questions'] ) ."','".  mysql_real_escape_string( $question ) ."','".  mysql_real_escape_string( $optionid[] ) ."'";
}

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



echo($questionsql)

更新:

下面是表单代码。工作原理是用户在textarea ('name='questionText')中键入问题并在选项(name='gridValues')中键入,然后将它们两个追加到表格行中(id='qandatbl'形式的表格) 。这是问题1.然后他们再次对第二个问题做同样的事情,然后是第三个等等。请仔细看看,这很容易遵循:)

<script>

    function insertQuestion(form) {   

    var context = $('#optionAndAnswer');

    var $tbody = $('#qandatbl > tbody'); 
    var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
    var $question = $("<td class='question'></td>");
    var $options = $("<td class='option'></td>");
    var $questionType = '';

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

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

    $question.append($questionText);

    });

    $('.gridTxt', context).each( function() {

     var $this = $(this);
     var $optionsText = $("<input type='text' class='gridTxtRow maxRow' />").attr('name',$this.attr('name'))
                     .attr('value',$this.val())

    $options.append($optionsText);
    $questionType = $this.val();

    });

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

    }

</script>


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

<table>
<tr>
    <td rowspan="3">Question:</td> 
    <td rowspan="3">
        <textarea id="questionTextArea" rows="5" cols="40" name="questionText"></textarea>
    </td>
</tr>
</table>

<table id="optionAndAnswer" class="optionAndAnswer">
<tr class="option">
<td>Option Type:</td>
<td>
<div>
    <input type="text" name="gridValues" class="gridTxt maxRow" readonly="readonly" />
</div>
</td>
</tr>
</table>

<table id="qandatbl" align="center">
<thead>
<tr>
    <th class="question">Question</th>
    <th class="option">Option Type</th>
</tr>
</thead>
<tbody>
</tbody>
</table>

</form>

3 个答案:

答案 0 :(得分:1)

如上所述 - 您已要求向您展示如何应用循环:

$optionquery = "SELECT OptionId FROM Option_Table WHERE (OptionType = '" 
         . mysql_real_escape_string($selected_option)."')";

    $optionrs = mysql_query($optionquery);
    while($optionrecord = mysql_fetch_array($optionrs)){
        $optionid[] = $optionrecord['OptionId'];
    }

然后你的$ optionid成为所有匹配元素的数组。

如果您认为我理解您的问题,那么请告诉我我们可以<{1}}查询


更新

UPDATE

答案 1 :(得分:0)

看起来每次都插入07,因为它是数组中的最后一个值。您可能需要遍历$ insertquestion数组并每次运行插入。

答案 2 :(得分:0)

在HTML中,请确保在输入名称中使用方括号:

<textarea name="questionText[]" class="first_textarea">
<textarea name="questionText[]" class="second_textarea">
<textarea name="questionText[]" class="third_textarea">