2012-04-03 65 views
1

我有一個php代碼,它使用switch語句從文本框中查找任何值,並輸出與$ selected_option匹配的正確的'optionId',它與文本框中的值匹配。它只在數據庫中正確顯示選項

我遇到的問題是可以說有4個問題,3個問題有不同的選項,1個有相同的optionId作爲另一個問題。當我在數據庫中插入他們來說,這是假設看起來象下面這樣:

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?我是否需要循環切換語句,或者在循環每個問題時循環$ 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:

以下爲形式的代碼。它是如何工作的,用戶在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> 
+0

是不是因爲你只有一個optionID :'$ optionid = $ optionrecord ['OptionId'];'? – Elen 2012-04-03 15:46:03

+0

您希望從$ optionquery獲得多少結果? – Elen 2012-04-03 15:47:44

+0

您需要爲每個問題獲取正確的opion ID,因此幾乎整個代碼看起來應該嵌套在'foreach()'語句中。 – 2012-04-03 15:53:35

回答

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然後成爲所有匹配元素的數組。

,如果你認爲我正確地理解你的問題,然後讓我知道,這樣我們可以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

我已經更新了代碼,以包含你給我的循環。問題是,當我這樣做時,它不會返回INSERT VALUES語句時,我echo $ questionsql。 – user1309180 2012-04-03 17:31:57

+0

我的意思是看這個例子:所以讓我們說問題1有選項3,所以查找case 3的case語句,case 3等於A-C,通過使用$ optionquery,我們發現數據庫中的A-C等於OptionId'O1'。對於問題2可以說它有選項7,所以查找case 7的case語句,case 7等於A-G,通過使用$ optionquery,我們發現數據庫中的A-G等於OptionId'O5'。因此,對於每個問題,需要查找所有可能的選項,然後找到與案例陳述相匹配的選項。 – user1309180 2012-04-03 22:18:27

+0

我更新了我的代碼以包含來自您的答案的編碼,但這不起作用,因爲這只是插入1個問題而已,這是最新添加的問題。 – user1309180 2012-04-03 22:33:56

0

它看起來好像是將每個07這是數組中的最後一個值。您可能需要遍歷$ insertquestion數組並每次運行插入。

0

在你的HTML,請確保您使用的是你的名字輸入方括號:

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