插入值时仅显示1行

时间:2012-04-04 11:58:46

标签: php javascript mysql

我的代码应该显示每个问题($ _POST [questionText])。对于每个问题,它显示它的SessionId,QuestionId,QuestionContent和OptionId。但相反,它只显示1个问题。为什么它只显示1个问题,如何让它显示所有问题?

我使用echo使用INSERT VALUES对输出进行文本处理。

foreach($_POST['questionText'] as $i => $question)
{

      $insertquestion = array();


$options[] = $_POST['gridValues'];

switch ($options[$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($_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) . ")";

    $i++;

    }

echo($questionsql);

以下是javascript代码和表单代码。工作原理是用户在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" >

    <h1>SESSION (<?php echo $_SESSION['id'] ?>)</h1>

    <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 :(得分:2)

第一。你可以把你的javascript更改为:

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

然后你的PHP代码:


更新

$i = 0;
$c = count($_POST['gridValues']);

print_r($_POST['questionText']);
print_r( $_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($_SESSION['id'] ) . 
                    ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '') ."' ,'". 
                    mysql_real_escape_string( $_POST['num_questions'] ) ."','".  
                    mysql_real_escape_string( $_POST['questionText'][$i] ) ."','".  
                    mysql_real_escape_string( $optionid ) ."'";

}

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

echo($questionsql);

答案 1 :(得分:2)

据我所知,你的代码就是这样做的......

foreach($_POST['questionText'] as $i => $question)
{
    // insert the row
    $questionsql = '...';
    $i++;
    }
echo($questionsql);

所以$questionsql在循环结束时输出,此时它将包含仅来自最后一次迭代的数据。

如果你想为每个插入的行输出$questionsql,它需要进入循环。

答案 2 :(得分:0)

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

这部分功能只会导致函数的一次迭代发生。您使用id选择器(唯一)和组合的每个功能。因此,您选择一个元素,然后使用每个函数迭代一个对象。