2013-11-25 42 views
0

我試圖在MySQL數據庫中存儲張貼的Web表單的數據。在MySQL數據庫中存儲複選框數據時使用分隔符

典型地,用一個簡單的文本或數字輸入,每一個輸入具有涉及一種特定quesiton的ID,因此每個應答在表中創建一個新的記錄的「答案」

例如

<input type="text" value="hello" id="qid_101" name="q_101"> 

當這張貼時,我使用php去除qid號碼並將其存儲在該值。

然而,當複選框的基團具有發佈數據,其結果是一個數組即

<div class="checkboxes"> 
    <div> 
    <input type="checkbox" value="A " name="checkboxes[]" /> 
    <span class="inline">a</span> 
    </div> 
    <div> 
    <input type="checkbox" value="B" name="checkboxes[]" /> 
    <span class="inline">b</span> 
    </div> 
    <div> 
    <input type="checkbox" value="C" name="checkboxes[]" /> 
    <span class="inline">c</span> 
    </div> 
</div> 

給我其中我不能在數據庫中直接存儲陣列命名複選框。

Following the advise of others on SO我打算把數組內爆成一個字符串和故事,然後引用時再次爆炸它。

我有兩個問題:

1)這感覺不好的做法,我,因爲它是反規範化我的數據,但我想不出另一種方式來做到這一點(存儲的答案是唯一相對於用戶和問題ID - 因此將每個複選框的值存儲在相同的問題ID中會破壞站點的其他部分)

2)什麼是使用陣列時好用的分隔符 - 是否有我應該使用的字符列表避免與MySQL避免混淆?

回答

1

如果你已經知道答案集只有alpha,那麼逗號就是一個足夠的分隔符。如果不是,請使用serialize()函數將值數組存儲爲字符串並將其存儲在MySQL中。

我同意反規範化有點過分。不知道更多關於你的應用程序,我會試圖添加一個連接表(user_id,question_id,答案)來存儲每個用戶的多個答案。

+0

是的 - 我需要了解更多關於聯接表,因爲我目前不使用它們,我懷疑他們是我正在尋找的答案。感謝有關serialize()的信息 - 它存儲和數組作爲一個字符串? – Gideon

相關問題