2012-04-03 9 views
1

私は、switch文を使ってテキストボックスから値を探し、テキストボックスからの値と一致する$ selected_optionに一致する正しい 'optionId'を出力するphpコードを持っています。これは、データベースに正しく表示されるオプションだけです

私が持っている問題は、4つの質問、異なるオプションの3つの質問、もう1つの質問と同じoptionIdを持つ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) 

UPDATE:以下

フォームコードです。どのように動作するのかは、テキストエリア('name='questionText')の質問にユーザーが入力し、オプション(name='gridValues')に入力し、テーブル行に2つ(テーブルはid='qandatbl'という形式のテーブル)を追加します。これは、その後、彼らは、2番目の質問について、第3およびなど、再び同じことを行い、07をそれぞれ挿入されているように見えます:)

<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> 
+0

にを働かせることができるので、知らせすることはありません: '$ optionid = $ optionrecord ['OptionId'];'? – Elen

+0

'$ optionquery'からいくつの結果が期待されますか? – Elen

+0

質問ごとに正しいopion IDを取得する必要があるので、 'foreach()'ステートメントでネストする必要があるように、コード全体がかなり見えます。 –

答えて

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は、すべての一致する要素の配列になります。

あなたは私が正しくあなたの問題を理解すると思われる場合、あなたは一つだけoptionIDを持っているので、その後、私たちはUPDATEクエリ


UPDATE

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

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

     switch ($options[$i]){ 
      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); 
    $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) ."'"; 

    $i++; 
} 

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

    echo($questionsql); 
+0

私はあなたが私に与えたwhileループを含めるコードを更新しました。問題は、私がこれを行うと、$ questionsqlをエコーするときにINSERT VALUES文が実行されないことです。 – user1309180

+0

私はこの例を見ています:質問1はオプション3を、ケース3はケース3、ケース3はA-C、オプションは$ optionqueryを使用して、OptionId 'O1'と同じデータベース内のA-質問2については、オプション7があるので、ケース7のケース・ステートメントを参照してください。ケース7はA-Gに等しく、$ optionqueryを使用すると、データベースのA-GがOptionId 'O5'に等しくなります。したがって、各質問に対して、可能なすべてのオプションを調べて、caseステートメントに一致するものを見つける必要があります。 – user1309180

+0

答えのコードを含めるようにコードを更新しましたが、これは機能しませんでした。これは1つの質問のみを挿入するものであり、それが最新の質問です。 – user1309180

0

に従うことは簡単です、慎重にこれを見てください質問1です。それは配列の最後の値です。 $ insertquestion配列をループし、毎回挿入を実行する必要があるかもしれません。あなたのHTMLで

0

、あなたが入力名に角括弧使用していることを確認してください:説明したように

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