2013-02-14 81 views
0

我有一段代碼,它顯示了每個顯示爲複選框按鈕的問題的可能答案列表。我想要做的是爲每個答案按鈕添加關聯標記,這些標記可以從數據庫中獲取。爲正確的答案從數據庫檢索他們的標記。對於不正確的答案他們的商標是每個價值0.我的問題是如何的,什麼是做到這一點的最佳方式:如何將每個答案按鈕的標記關聯起來

數據庫表:

問:

QuestionId (PK auto) QuestionNo SessionId (FK Session) OptionId (FK Option)  
72     1   26      3 
73     2   26      4 

Option_Table:

OptionId (PK Auto) OptionType 
1     A-C 
2     A-D 
3     A-E 
4     A-F 

答案:

AnswerId (PK auto) QuestionId (FK Question)  Answer 
1       72       C    
2       73       A    
3       73       C    
4       73       D  

Individual_Answer:下面它編譯查詢和comiples每個問題的答案按鈕

AnswerId (PK auto) AnswerMarks 
1     2 
2     2 
3     1 
4     2 

代碼:

$qandaquery = "SELECT q.QuestionId, q.QuestionNo, o.OptionType, GROUP_CONCAT(DISTINCT Answer 
        ORDER BY Answer 
        SEPARATOR ',') AS Answer 
        FROM Question q 
        LEFT JOIN Answer an ON q.QuestionId = an.QuestionId 
        LEFT JOIN Individual_Answer ia ON an.AnswerId = ia.AnswerId 
        LEFT JOIN Option_Table o ON q.OptionId = o.OptionId 
        "; 

    global $mysqli; 
    $qandaqrystmt=$mysqli->prepare($qandaquery); 
    // get result and assign variables (prefix with db) 
    $qandaqrystmt->execute(); 
    $qandaqrystmt->bind_result($qandaQuestionId,$qandaQuestionNo,$qandaOptionType,$qandaAnswer); 

    $arrQuestionId = array(); 
    $arrQuestionNo = array(); 
    $arrOptionType = array(); 
    $arrAnswer = array(); 
    $arrReplyType = array(); 

foreach ($arrQuestionId as $key=>$question) { 

?> 

<div class="queWrap"> 

//LOOP THROUGH EACH QUESTION 
<p><?php echo "<strong>".htmlspecialchars($arrQuestionNo[$key])."</strong>"; ?></p> 

//BELOW DISPLAYS THE ANSWER BUTTONS FOR EACH QUESTION 
$options = explode('-', $arrOptionType[$key]); 
if(count($options) > 1) { 
    $start = array_shift($options); 
    $end = array_shift($options); 
    do { 
     $options[] = $start; 
    }while(++$start <= $end); 
} 
else{ 
    $options = explode(' or ', $option); 
} 

     foreach($options as $indivOption) { 
    echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . $indivOption . '" /><span>' . $indivOption . '</span></label></div>'; 
} 
?> 

//HIDDEN INPUT SHOWING DB's QUESTIONID FOR EACH QUESTION 
<p><input type='hidden' class='questionIds' name='questionids' value='<?php echo htmlspecialchars($arrQuestionId[$key]); ?>' /></p> 

</div> 


<?php 

} 

?> 

下面是顯示2個問題的源代碼和他們的回答:

<div class="queWrap"> 

    //QUESTION 1 

    <p><strong>1:</strong></p> 

    //ANSWER BUTTONS FOR QUESTION 1 

    <div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-A" value="A" /><span>A</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-B" value="B" /><span>B</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-C" value="C" /><span>C</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-D" value="D" /><span>D</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-E" value="E" /><span>E</span></label></div> 

    //QUESTIONID FOR QUESTION 1 

    <p><input type='text' class='questionIds' name='questionids' value='72' /></p> 

    </div> 

    <div class="queWrap"> 

    //QUESTION 2 

    <p><strong>2:</strong></p> 

    //ANSWER BUTTONS FOR QUESTION 2 

    <div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-A" value="A" /><span>A</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-B" value="B" /><span>B</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-C" value="C" /><span>C</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-D" value="D" /><span>D</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-E" value="E" /><span>E</span></label></div> 
<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-F" value="F" /><span>F</span></label></div> 

    //QUESTIONID FOR QUESTION 2 

    <p><input type='text' class='questionIds' name='questionids' value='73' /></p> 

    </div> 

回答

1

每次選中複選框時,您都可以向服務器發出AJAX請求。這使您可以在服務器上保留所有答案並監視那裏的進度。

首先,我想補充一個data-屬性使用額外的輸入存儲問題ID質疑包裝而不是:

<div class="queWrap" data-q_id="72"> 

的jQuery:

$function(){ 
    $('.queWrap input:checkbox').change(function() { 
     var $ch_box = $(this), 
      $qwrap=$ch_box.closest('.queWrap') 
      q_id = $qwrap.data('q_id'), 
      val = $ch_box.val(); 

     var dataToServer = { 
      q_id: q_id, 
      valueSelected: val 
     } 

     /* due to demo environment sending dummy data*/ 

     $.post('/echo/json/', dataToServer, function (response) { 
      /* disable checkboxes for this question- would need to track at server that user only submits once for each question*/ 
      $qwrap.find('input:checkbox').prop('disabled',true); 
      /* demo uses JSON response {"status":"correct"}*/ 
      var status=response.status 
      $qwrap.find('.status').text(status).addClass(status); 
     });  
    }); 
}); 

DEMO:http://jsfiddle.net/bWthd/

+0

您好,感謝對於答案,我可以問一個問題,在你的代碼中顯然你已經寫了它,以確定選擇的答案是否正確,並禁用複選框,顯然,我刪除了禁用按鈕的代碼行,我的問題是如何實現它,以便爲選定的每個答案計數標記。所有不正確的答案都是'0',正確的答案標記取決於所選答案。這是隱藏的是從所選答案中確定的每個問題的標記總數。 – Manixman 2013-02-14 02:31:15

+0

多種方式來做...在每個問題的數據中存儲標記值,或發送響應數據。保持一個計數器進入頁面並在每個Ajax調用的成功回調中更新計數器 – charlietfl 2013-02-14 02:50:05

+0

我知道我問了很多,但你能在自己的時間顯示一個代碼片段,你有更多的知識做到這一點,因爲我很少使用阿賈克斯和我需要儘快完成。我不是一個強大的網絡程序員,我處理更多的oracle/sql和一些PHP,只有基本的Web編程知識,如HTML,CSS,JavaScript等。我知道我問了很多,但真正讚賞它,如果你能做到這一點爲了我 – Manixman 2013-02-14 02:55:55

相關問題