2011-02-15 77 views
1

我有一個很長的問卷(46個問題),每個問題都有(3)個可能的答案,是的,有時和不是,(3個單選按鈕),每個都有相應的值,分別爲10,5和-10。如何通過PHP將多個單選按鈕值傳遞給MYSQL數據庫作爲所有單個值,但將它們隔離到組中?

我在四個標題之間劃分了幾個問題,每個標題下有幾個問題。 我能夠通過給每個與數據庫中的字段相對應的不同名稱屬性發布所有數據到mySQL數據庫。

我遇到的問題是,我可以不再使用單選按鈕爲一組,那就是,他們都是可選的,擊敗有他們的目的,從根本上讓他們來檢查盒....

我需要讓每個單選按鈕在我的數據庫中擁有它自己的值,並且我需要將它們分組在每個問題的3個可能的選項中...

我將發佈我的表單html和php發送腳本的示例... 預先感謝您的任何建議...

html code one question

  <div class="questionBox"> 
     <p>1.Have I clearly defined my companies target market?</p> 
     <input type="radio" name="ca1y" value="10"/> 
      <label for="ca1">YES</label> 
     <input type="radio" name="ca1s" value="5"/> 
      <label for="ca1">SOMEWHAT</label> 
     <input type="radio" name="ca1n" value="-10"/> 
     <label for="ca1">NO</label> 
     </div> 

/* PHP後更新*/

$radioPost="INSERT INTO questions 
(  ca1y, 
     ca1s, 
     ca1n,...) 
VALUES 
( '$_POST[ca1y]', 
    '$_POST[ca1s]', 
    '$_POST[ca1n]',...) 

我想給每個單選按鈕的ID屬性,並用它來更新數據庫,但我似乎無法得到那個工作。 ...

任何幫助將不勝感激 歡呼聲。

回答

2

我不確定我是否得到了你想要做的事情,但它似乎需要將個人對不同問題的答案保存到數據庫,但是每個問題只能有一個讓我們說三個可能的答案。那麼,在這種情況下,你可能會認爲重新設計你的數據庫看起來是這樣的:

enter image description here

您存儲用戶信息中的用戶表,在問表的問題的細節和不同的答案的答案表。用戶將能夠回答多個問題,但只能回答一個特定的問題。例如,您將答案保存在一個名爲answer_value的字段中。由於您將存儲他們選擇的單選按鈕的VALUE值,因此無需將答案存儲在多個字段中,即您將存儲10,5或-10,具體取決於所選的無線電選項。

同樣重要的是,在您的HTML中,您將特定問題的所有單選按鈕命名爲相同。這確保了無線電選項充當單選按鈕而不是複選框。你的HTML將最有可能是這個樣子:

<div class="questionBox"> 
    <p>1.Have I clearly defined my companies target market?</p> 
    <input type="radio" name="q1" value="10"/> 
     <label for="ca1">YES</label> 
    <input type="radio" name="q1" value="5"/> 
     <label for="ca1">SOMEWHAT</label> 
    <input type="radio" name="q1" value="-10"/> 
    <label for="ca1">NO</label> 
</div> 
<div class="questionBox"> 
    <p>2.Have I clearly defined my companies product?</p> 
    <input type="radio" name="q2" value="10"/> 
     <label for="ca2">YES</label> 
    <input type="radio" name="q2" value="5"/> 
     <label for="ca2">SOMEWHAT</label> 
    <input type="radio" name="q2" value="-10"/> 
    <label for="ca2">NO</label> 
</div> 
..... 

注意問題1的有3個無線電選項都命名爲「Q1」,並質疑2有3個無線電選項都命名爲「Q2」。按照相同的慣例處理所有問題。你的PHP就變成非常簡單,可能會是這個樣子:

$radioPost="INSERT INTO answers (user_name, question_name, answer_value) 
VALUES (('$_POST[user_name]', 'q1', '$_POST[q1]),('$_POST[user_name]', 'q2', '$_POST[q2]), ....) 

如果你不知道的單選按鈕的名稱是什麼,你可以使用foreach循環如下:

$user = $_POST[user_name]; 
foreach ($_POST as $key => $val) 
{ 
    If ($key <> 'user_name') //you might need to check that you only reading the radio     options 
    { 
     $radioPost="INSERT INTO answers (user_name, question_name, answer_value) 
        VALUES ('$user', $key, '$val')" 
     .... 
    } 
}  

而且是建議即使你只使用無線電選項,你仍然應該清理輸入以防止SQL注入等攻擊。我建議你找一些關於保護你的代碼免受攻擊的信息。

順便說一句,如果您將問題放在自己的表格中,您可以從該表格動態創建問卷,然後您可以隨意添加或刪除問題,使整個應用程序更靈活。並且將答案保存在一個字段而不是三個字段中,將刪除表中的所有NULL值,這將在您執行計算時簡化查詢。我知道MySQL通常會將零作爲默認整數值,但將它保存到一個字段中更好。如果您想知道用戶爲特定問題選擇了哪個選項,請檢查該字段中存儲的值。

0

不是很好的解決方案:寫js取消選擇合適的單選按鈕。

更嚴重的說明我不明白需要擁有不同名稱的所有無線電。爲什麼這樣的解決方案不適用:在同一個問題中命名同一個名稱的收音機,讓我們說question1,然後在表單發佈之後查看數值,並從中輕鬆更新數據庫。我想你想收集每臺收音機選擇的次數。所以,如果你知道問題1有選擇1,那麼你也知道問題1沒有選擇2和3.除非你以其他方式收集數據或用於其他目的,但是我認爲需要從你那裏獲得更多的信息這個的目的。雖然我仍然認爲你可以像我說的那樣做這個,但這不需要複雜的處理,編號說基本的編程知識就足夠了。

+0

謝謝,我會擴大。 的目的是讓這個網頁填充數據庫... 有一個用戶名和公司字段,我遺漏了,但這將與特定用戶選擇每個問題的3個選項的特定用戶一起進行。 這是可以訪問不同的組織,所以數據庫將增長,以及我需要能夠區分每個使用個別響應,因此每個廣播答案生存在我的數據庫自己的領域,大約有146個字段,並被下載到一個電子表格,一些數學,我得到我的數據.... 這是否改變你的答案? – user482024 2011-02-15 20:04:38

+0

例如,我有我的PHP找到電臺名稱=屬性,並與我的數據庫字段對齊...我可以以某種方式使其與我的窗體,而不是名稱= ID =字段對齊?這似乎是一個簡單的修復,但它不會工作 – user482024 2011-02-15 20:09:18

相關問題