2012-10-12 130 views
1

使用此代碼如果您有答案或b答案,您如何才能使其僅回顯收音機或複選框。在我的測驗中,它將成爲一個bc d和一個(true)b(錯誤)答案。爲了完成我的測驗,這是阻止我完成它的唯一因素。我的問題可能不是重點,但我試圖讓它問我接近我做了什麼。謝謝你的幫助。我怎樣才能得到這個回聲功能?

<?php 
    //retreive questions from database and put into question box 

    $query2 = "SELECT `QuestionId`, `Question`, `Opt1`, `Opt2`, `Opt3`, `Opt4`,`Answer` FROM `pf_questions`"; 

    $question2 = mysql_query($query2); 

    while($row = mysql_fetch_array($question2)){ 

     $id   = $row['QuestionId']; 
     $question = $row['Question']; 
     $opt1  = $row['Opt1']; 
     $opt2  = $row['Opt2']; 
     $opt3  = $row['Opt3']; 
     $opt4  = $row['Opt4']; 
     $answer  = $row["Answer"]; 




    ?> 
    <div id="ContainerQuestion"> 
     <span class="Question">Question <?php echo $id; ?>. <?php echo $question; ?></span> 

      <p><input type=radio name='q<?php echo $id; ?>' <?=($answer == 'a')?("checked='checked'"):(""); ?> value="a"> <?php echo $opt1; ?> </p> 
      <p><input type=radio name='q<?php echo $id; ?>' <?=($answer == 'b')?("checked='checked'"):(""); ?> value="b"> <?php echo $opt2; ?> </p> 
      <p><input type=radio name='q<?php echo $id; ?>' <?=($answer == 'c')?("checked='checked'"):(""); ?> value="c"> <?php echo $opt3; ?> </p> 

      <p><input type=radio name='q<?php echo $id; ?>' <?=($answer == 'd')?("checked='checked'"):(""); ?> value="d"> <?php echo $opt4; ?> </p> 


    </div> 
    <?php 
    } 

    ?> 
+4

請不要使用'mysql_ *'函數來編寫新代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。請參閱* [紅盒子](http://goo.gl/GPmFd)*?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。另請參閱[爲什麼不應該在PHP中使用'mysql_ *'函數?](http://stackoverflow.com/q/12859942/871050) –

+0

您是否試圖在Opt3和Opt4的情況下僅顯示兩個單選按鈕字段是空白的? – jedwards

+0

@jedwards如果問題有a b c d,那麼我希望它用四個選項來顯示問題,如果問題有b,那麼沒有c d應該顯示。所以是的,在你關於Opt3&Opt4字段的問題是空白的。 –

回答

0

我想我明白你在問什麼。 您想要將每行都包含在「if」子句中。 例如:

<?php if(isset ($opt3)) { ?> 

<p><input type=radio name='q<?php echo $id; ?>' <?=($answer == 'c')?("checked='checked'"):(""); ?> value="c"> <?php echo $opt3; ?> </p> 

<?php } 
     if(isset ($opt4)) { ?> 

<p><input type=radio name='q<?php echo $id; ?>' <?=($answer == 'd')?("checked='checked'"):(""); ?> value="d"> <?php echo $opt4; ?> </p> 

<?php } ?> 

有點醜陋的黑客攻擊,但它應該工作以及你的想法。

+0

空字符串不爲空,並且在傳遞給isset()時應返回「TRUE」。 – jedwards

+0

我做了一個假設,他的數據庫中的NULL字段應該是他對這些情況的。否則,您可以在if語句中添加'&&($ opt3)'以確保不爲空。 –

+0

@ user16081我會盡力而且也想感謝大家在我的帖子上提出的意見。 –

0

我可能會用類似如下(未經測試)更換您while循環:

$answerFields = array('Opt1'=>'a', 'Opt2'=>'b', 'Opt3'=>'c', 'Opt4'=>'d'); 

while($row = mysql_fetch_array($question2)){ 
    $id   = $row['QuestionId']; 
    $question = $row['Question']; 

    // Print Question 
    printf('<div id="ContainerQuestion">'); 
    printf('<span class="Question">Question %s. %s</span>', $id, $question); 

    // Print Answers 
    foreach($answerFields as $field=>$ans) 
    { 
     if(array_key_exists($field, $row) && $row[$field]) 
     { 
      $checked = ($row["Answer"] == $ans) ? 'checked' : ''; 
      printf('<p><input type="radio" name="%s" %s value="%s">%s</p>', 
       $id, $checked, $ans, $row[$field]); 
     } 
    } 
} 

如果你的數據庫(選項1,選項等)的回答字段沒有設置,或空字符串,不應該打印包含響應的<p>

該解決方案允許您將應用程序擴展到3/4響應被填充和1/4爲空的情況。它還通過使用printf聲明而不是在內聯php和html之間跳轉來清理你的代碼。

最後,強制性註釋指出了關於預備陳述的重要評論。

+0

感謝您的幫助。另外我怎樣才能讓它在提交的時候出現;它將結果發送到我的電子郵件中,並提供問題答案和正確的答案。例如:Joe Doe測驗結果1.問題 - 答案:A.真或者C.編碼的人 - 正確答案:B.錯誤或C:編碼它的人。也許你有10/20的權利。如果你明白我的意思。 –

+0

哦,男人,這是一個完全獨立的問題。如果這有效,請告訴我們,並考慮查看['mail()'](http:// php。net/manual/en/function.mail.php)函數,並在這裏創建一個單獨的問題,如果遇到問題。 – jedwards

+0

感謝您使用幫助的幫助讓它正常工作,再次感謝。在我問到這個問題之前,我會研究它並嘗試一些東西。「當我們提交它的時候,我又該如何做到這一點;它會將結果發送到我的電子郵件中,問題的答案和答案都是正確的。 Doe測驗結果1.答案:A.真或者C.編碼的人 - 正確答案:B. false或C:編碼的人,也許你有10/20的權利如果你知道我的意思「。 –