2011-02-02 36 views
1

我正在創建一個從頭開始的在線調查,該調查將保存在數據庫中。我正在努力建立一個系統,以便有人可以創建一個新的民意調查。在不知道確切字段數量的情況下檢索POST數據

我會讓用戶用問答填寫一個簡單的HTML表單(可能有幾個答案)。用戶將能夠爲每個問題添加多個問題和多個答案。

由於問題和答案的總數將由用戶決定,因此我需要創建一些靈巧的PHP來迎合這一點 - 不管有多少。

處理靜態數量的問題時,很簡單。但是我很難想出一種將所有POST數據轉換爲單個PHP變量的方式,所以我可以處理它們。

我正在考慮使用foreach循環,任何人有任何想法?

對不起,冗長的描述!如果有人需要澄清,我很樂意這樣做。我的問題是,當我不清楚數組中哪個元素將包含什麼內容時,我無法理解如何處理POST值。如果事情是靜態的,有一系列的問題和答案,我知道$_POST[0]是Question1等。

謝謝! =)

回答

1

當您將輸入字段命名爲questions[]時,它們將以如下參數傳遞:questions[]=Q1&questions[]=Q2(無論在查詢字符串還是帖子正文中)。 PHP會將它們轉換爲$_POST['questions']中的數組,您可以輕鬆地遍歷它們。如果您需要將多個字段合併爲一個數組,則還可以明確指定該鍵。

當你需要嵌套數據,所以「問題1」在此的美是有問題的字符串,正的答案,也許一個設置選項:

<input type="text" name="questions[0]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][answers][]"> 
<input type="text" name="questions[0][option][foo]"> 

...轉換成......

[questions] => Array 
    (
     [0] => Array 
      (
       [answers] => Array 
        (
         [0] => answer1 
         [1] => answer2 
         [2] => answer3 
         [3] => answer4 
        ) 

       [option] => Array 
        (
         [foo] => bar 
        ) 

      ) 

    ) 
+0

我喜歡這種方法,正如您和meagar所證明的那樣。我將如何去訪問PHP中的questions數組? 「 – James 2011-02-02 16:22:58

+0

」PHP會將這些轉換爲`$ _POST ['questions']`中的數組。 :) – coreyward 2011-02-02 16:40:47

+0

已將此答案標記爲解決方案,因爲我正在使用如此處所示的多維數組方法。非常感謝meagar和其他人回覆。我使用每個人的帖子來創建一些適合我的東西,我可以理解! - 偉大的網站,偉大的社區!再次感謝! – James 2011-02-02 19:09:27

1

foreach將工作。

foreach($_POST as $name => $item) 

$ name將包含值的名稱,通過該名稱可以確定它的值。它將包含名爲'question1'的字段的'question1'。 :)

+0

ha忍者14秒... upvoting y我們的回答並刪除我的 – Serge 2011-02-02 15:19:28

2

$_POST應始終是一個關聯數組,其中表單元素的名稱映射到數組的索引。除非您明確指定您的表單字段0,否則您不應該訪問$_POST[0]。相反,如果你的元素是<input name="field1" />,你會發現提交的值爲$_POST['field1']

請記住,你可以強制PHP通過追加數組索引以他們的名字來詮釋進來的表單元素的數組值:

<input name="question[]" type="text" /> 
<input name="question[]" type="text" /> 

當回發到你,$_POST['questions']將包含所有的數組question字段。

如果您要動態添加表單元素到您的頁面以允許用戶添加多個問題,請確保正確命名它們,並且PHP將爲您處理構建陣列。

您可以遍歷輸入數據後用類似的東西:

foreach ($_POST['questions'] as $question) { 
    // sanitize/save your user's question 
} 
1

[]結尾的名稱創建多個輸入字段,即:

ans1: <input type=text name='ans[]'> 
ans2: <input type=text name='ans[]'> 
name: <input name='name'> 

然後,所有值將作爲陣列出現在$ _POST陣列內。:

array(2) { 
    ["ans"]=> 
    array(2) { 
    [0]=> 
    string(3) "LOL" 
    [1]=> 
    string(3) "WTF" 
    } 
    ["name"]=> 
    string(4) "John" 
} 
相關問題