2011-05-15 65 views
2

問題提交嵌套表單數據到PHP的最佳實踐?

我想弄清楚從典型的HTML表單提交數據到PHP文件的最佳方式。數據看起來是這樣的:

  1. 問題1
    • 答案選擇1
    • 答案選擇2
    • 答案選擇3
  2. 問題2
    • 答案選擇1
    • 答案選擇2

我的解決方案

這是我的問題的用武之地。使用多維數組難道是合適的呢?從上面的例子可以看出,每個問題的選擇數量可能會有所不同。所以爲什麼不把每個問題的選擇數量存儲到每一行選項的第二個插槽中(第一個插槽將是問題文本的字符串):

  • [0] [0]:字符串的問題1
  • [0] [1]:對問題1的選擇數
  • [0] [2]:回答的選擇問題1
  • [0] [3]:答案的選擇問題2
  • [0] [4]:問題3的答案選擇
  • [0] [5]:問題4的答案選擇
  • [1] [0]:字符串問題2
  • [1] [1]:對問題的選擇編號2
  • [1] [2]:回答的選擇問題2
  • [1 ] [3]:問題2的答案選項

但是,我覺得這不是一個好的方法,因爲以後很難再改變。有沒有一些方法將對象傳遞到PHP而不需要JavaScript?

+0

是的,需要發佈的問題,因爲整個形式是假設讓人們cre吃了測驗。選擇的數量是可變的,取決於你想如何構建問題(多選,真/假等)。 – Sam 2011-05-15 06:35:59

+0

如果這個表單是用來創建測驗的,那麼我就會這麼做。儘管您可能想要指定答案的類型(複選框,收音機,文本框等) – exahex 2011-05-15 06:54:48

回答

0

您的解決方案IMO,可能是最好的選擇 - 我只想刪除[*][1]指標,因爲它們的價值可以在PHP中很容易計算的只是在做:

count($nested[$i]) - 1 

但是你也可以按照另一種方法:

  • [ '字符串問題1'] [0]:回答的選擇#1問題1
  • [ '字符串問題1'] [1]:回答的選擇#2問題1
  • ['問題1的字符串'] [2]:問題1的答案選擇3#
  • ['問題1的字符串'] [3]:問題1的答案選擇#4
  • [問題2 '] [1]:回答的選擇#1問題2
  • [' 字符串問題2' ] [2]:回答的選擇#2問題2

而在PHP:

foreach ($nested as $question => $answers) 
{ 
    foreach ($answers as $answer) 
    { 
    } 
} 
1

如果你知道問題的ID,您將只發布回答陣列

<input type="radio" name="answer[<quest_id>]" value="0"> 
<input type="radio" name="answer[<quest_id>]" value="1"> 
<input type="radio" name="answer[<quest_id>]" value="2"> 
<input type="radio" name="answer[<quest_id>]" value="3"> 
<input type="radio" name="answer[<quest_id>]" value="4"> 

文章後,您將有答案陣列

foreach($_POST['answer'] as $question_id => $answer) 
0

嘛,你不必須要對數字指標如此依賴因爲您可以使用表單輸入名稱來構建自己的結構。例如:

  • question0_string:字符串問題1
  • question0_choices [0]:回答的選擇問題1
  • question0_choices [1]:回答的選擇問題2
  • question0_choices [2]:回答回答的選擇。問題4
  • question1_string::字符串問題2
  • 問題1問題3
  • question0_choices [3]的選擇on1_choices [0]:答案選擇問題2
  • question1_choices [1]:答案選擇問題2

...然後在你的PHP看着$ _ POST與array_walk()搶格式的名稱,也許和一個回調函數split()array_keys()_並將它們放入一個新的數組中。您可以使用preg_match()而不是split來更輕鬆地解析問題編號。在我上牀的路上,但你可以通過一些試驗和錯誤來弄清楚。