2010-11-04 69 views
2

我正在嘗試按照以下方式創建表單(我知道這不是有效的HTML,但它希望能夠說明我爲什麼和爲什麼我試圖做到這一點):如何在HTML表單中創建一組項目的數組

<form method="post" action="test.php"> 
    <input type="text" name="teamName"> 
    <br />Players: 
    <grouping name="players[]"> 
     <input type="text" name="firstName"><br /> 
     <input type="text" name="lastName"><br /> 
    </grouping> 
    <input type="submit" value="submit"> 
</form> 

通過javascript,我會根據需要多次添加分組元素。當表單提交,然後我可以訪問該分組元素的項目如下:

foreach ($players as $player) { 
    $fName = $player->firstName; 
    $lName = $player->lastName; 
} 

也就是說,我開始之前,我不知道有多少球員會在球隊,但我知道一個球員的樣子。我希望將這一切都保存在一個屏幕上,以便用戶可以在一個頁面上將玩家添加到他們的團隊中,並且我希望能夠將字段分組添加爲一個組。不過,我也是這樣的分組存儲爲一個數組,而不是做這樣的事情:

<form method="post" action="test.php"> 
    <input type="text" name="teamName"> 
    <br />Players: 
    <input type="text" name="firstName[]"><br /> 
    <input type="text" name="lastName[]"><br /> 
    <input type="submit" value="submit"> 
</form> 

這將意味着我可以通過在分組的各個元素進行迭代,而不是通過分組作爲整個。

任何想法,我可能會做到這一點?解決這個的

回答

9

看你的結構,不過,我建議你去一個更強大的陣列結構:

foreach ($players as $i => $player) { 
    $fName = $player->firstName; 
    $lName = $player->lastName; 

    echo '<input type="text" name="players['.$i.'][firstName]" value="'.$fName.'" />'; 
    echo '<input type="text" name="players['.$i.'][lastName]" value="'.$lName .'" />'; 

} 

當您提交此,你會得到:

players => Array(
    [0] => Array (
    firstName => a name, 
    lastName => another name, 
), 
    [1] => Array (
    firstName => a name, 
    lastName => another name, 
), 
etc... 
) 

或者,不是在foreach語句中生成$ i,而是在最後一個輸入字段中增加$ i ++,但爲了調試目的,通常很高興知道whi ch索引您從原始數組中使用的索引。

我推薦這種方法對你的問題的例子,因爲它也可以讓你做一個計數/到$ _ POST迭代[「玩家」]

希望這有助於

+0

如果我只是做了一些像name =「players [] [firstName]」和name =「players [] [lastname]」這樣的工作嗎? – Elie 2010-11-04 20:31:43

+1

人。剛剛意識到這是我的第一個stackoverflow答案...哇。沒意識到我一直是這樣一個潛伏者。感謝您發送問題並激發我採取行動。 – 2010-11-04 20:32:28

+1

不,你會基本上做球員[0] [firstName]和球員[1] [lastName]。每個[]的實例都會增加數組指針。 – 2010-11-04 20:33:00

0

多種方式:

1)創建一個計數器$i = 0你的循環之外,並在其內部做$i++。相反命名firstName[]使用firstName[<?php echo $i; ?>]

2)如果它真的只是第一和第二個名字 - 你可以使用一個單一<input>,然後在PHP解析它。

好運

+0

它實際上是十幾個領域,一些文字,一些數字和日期。解析單個輸入字段不會真正起作用。這些字段將使用Javascript動態地添加到表單中,這可能會或可能不知道有多少這樣的字段已被添加到屏幕。感謝您的幫助和建議,雖然 – Elie 2010-11-04 20:22:05

+0

PHP相關的注意事項:預遞增的變量比遞增後在PHP稍快(這是唯一真正的PHP)。而不是$ i ++,選擇++ $ i。 – zzzzBov 2010-11-05 03:44:38

3

這聽起來像是一份工作: <fieldset>

包裹在<fieldset>元素的<input>元素,並可能給字段集的ID,有些類,或任何你想。

然後確保輸入的名稱使用正確的陣列結構:

players[NUMBER][firstName]players[NUMBER][lastName]應該正常工作(被取代的索引當然NUMBER)。

不要忘了給你<input>元素可訪問一個<label>。 給<fieldset>一個<legend>是一個好主意爲好。

+0

問題不在於如何對元素進行分組,而是如何避免將該數字編碼到字段名稱中。寫一些類似於player [] [firstName]的東西是我想要做的,除了爲每個字段創建一個新的數組元素。寫一些類似於[firstName] []的東西會自動創建適當的索引號,但是會以奇怪的方式迭代。 – Elie 2010-11-05 02:37:26

+0

是的,我還沒有找到避免手動指定數字的方法。 – zzzzBov 2010-11-05 03:05:06

相關問題