2011-08-24 69 views
0

這是我決定使用的數據庫設計http://www.flickr.com/photos/michaelstitt/6077647604/in/photostream/ - 使用the help from my previous post on Stack Overflow使用PHP和MySQL填充測驗Web應用程序表格

我正在嘗試使用PHP和MySQL構建測驗Web應用程序。手動構建HTML表單並編寫「問題」和「問題選擇」似乎更容易。不過,我想用我的數據庫中的數據填充表單。

所以,我的問題是你如何建議我從我的數據庫中的表'問題'或'question_choices'從數據庫中提取數據以填寫HTML表單?

的HTML表格會是這個樣子:

<form method="post" action="quiz1.php"> 

    <b>What was the make/model of my first car?</b> 
    <br> 
    <input type="radio" value="0" name="q_1"> 
    Toyota Camry <br /> 
    <input type="radio" value="1" name="q_1"> 
    Honda Accord <br /> 
    <input type="radio" value="0" name="q_1"> 
    Ford Explorer <br /> 
    <input type="radio" value="0" name="q_1"> 
    Plymouth Voyager <br /> 

本田雅閣將會從表question_choices的「選擇」列中的。值=「1」將由'is_right_choice'列確定,並將填充user_question_answer表中的'is_right'列。 這似乎是個好主意嗎?

任何其他意見將不勝感激。先謝謝你。

+0

我不這麼認爲。這將給用戶提供正確選擇的暗示。還是我理解你錯了? – glglgl

回答

1

這不是一個好主意,因爲任何查看HTML源代碼的人都可以找出哪個答案是正確的。另一方面,你的模式中有所有的信息來做這個服務器端(並保護答案)。

提問時間

我猜你想顯示一個頁面上的所有問答題(你不說)。您希望表單回到默認的quiz.php頁面。 (<form method="post" action="quiz.php" />

因爲quiz.php可以處理任何測驗,你需要嵌入測驗ID的形式,所以,當你正在處理的結果,你可以看到哪些測驗正在回答。嘗試<input type="hidden" name="quizid" value="1" />(假設這是測驗#1)。

您還需要明確說明從數據庫中將問題提交出數據庫的順序,因爲它們正在從ID切換到順序(所以如果您有10個問題的測驗,第一個ID爲11,最後一個ID爲21的人會成爲問題1-10)。在SQL語句中,這很容易通過order by id處理。

問題的輸出是不錯,收音機應該是選擇從question_choices的ID ..所有的值將是獨一無二的,它不是來自代碼是正確的答案清晰。我建議將元素重命名爲a_<#>,因爲當你處理它們實際上是你得到的答案(而不是問題),並且你可能想考慮圍繞fieldset(爲了可讀性)的問題+選擇:

<fieldset> 
    <b>What was the make/model of my first car?</b><br /> 
    <input type="radio" value="214" name="a_1">Toyota Camry <br /> 
    <input type="radio" value="215" name="a_1">Honda Accord <br /> 
    <input type="radio" value="216" name="a_1">Ford Explorer <br /> 
    <input type="radio" value="217" name="a_1">Plymouth Voyager <br /> 
</fieldset> 

在提交時,我會驗證所有問題,至少有一個選項被選中(除非沒有答案也是答案)......以便用戶不會意外地提交一半填寫的表單(通過按進入或因爲他們錯過了一個問題)。

應答時間

quiz.php所以第一件事就是抓$_POST["quizid"]並加載從數據庫中相關問題和question_choices。通過每個答案

接着迭代(1 - > n,其中n是問題的數量),並映射到這些question.ID值。

比較每個答案的值:$_POST["a_#"](#= 1-n)找出哪個question_choice用戶選擇的ID - 可以直接插入user_question_answer

如果你也想存儲is_right該表中你必須檢查這些ID對question_choice,看是否is_right_choice設置{你實際上是雙存儲這些數據,您可以通過自從user_question_answer去除is_right進一步規範您已經可以將答案(通過choice_id)映射到question_choices並檢查它是否是正確的}

而且您完成了!

+0

哇!感謝這樣詳細的回覆,我真的很感激!我還在開始階段我的實踐,將PHP/SQL和我有麻煩的四個答案選項理解「NAME = A_1」的功能。你建議我重新命名元素A_ <#> - 元素你指的是哪個?再次,非常感謝!我瞭解問題部分,仍然試圖讓我的頭在答案部分... – Abundnce10