0

以下のコードは、各質問 ($_POST[questionText]) を表示することになっています。質問ごとに、SessionId、QuestionId、QuestionContent、および OptionId が表示されます。しかし、代わりに 1 つの質問しか表示されません。1 つの質問しか表示されないのはなぜですか? また、すべての質問を表示するにはどうすればよいですか?

エコーを使用して、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 コードとフォーム コードです。どのように機能するかは、ユーザーがテキストエリアに質問を入力('name='questionText')し、オプション(name='gridValues')を入力してから、それらをテーブル行に 2 つ追加することです (フォームのテーブルは which id='qandatbl')。これが質問 1 です。次に、2 番目の質問、3 番目の質問と同じことを繰り返します。これをよく見てください。簡単に理解できます。

<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>
4

3 に答える 3

2

あなたのコードからわかる限り、それはこれをやっています...

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

同様$questionsqlに、ループの最後に出力されます。この時点では、最後の反復からのデータのみが含まれます。

$questionsql挿入された行ごとに出力されたい場合は、ループ内に入る必要があります。

于 2012-04-04T13:52:58.517 に答える
2

最初。Javaスクリプトを次のように変更してください:

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);
于 2012-04-04T12:46:51.273 に答える
0
$('#questionTextArea').each( function() {
...
}

関数のこの部分では、関数の反復が 1 回だけ発生します。IDセレクター(一意)と各機能を組み合わせて使用​​ しています。したがって、1 つの要素を選択し、each 関数を使用して 1 つのオブジェクトを反復処理します。

于 2012-04-04T12:04:32.157 に答える