2013-06-27 50 views
3
同名2 HTML輸入變量的數值

假設我有如下表:獲取具有使用PHP

<form action="bla.php" method=post> 
<table class="pv-data"> 
<tr> 
<td><input type="text" name="id" size="2" value=1 /></td> 
<td><input type="text" name="longitude" size="7"/></td> 
<td><input type="text" name="latitude" size="7"/></td> 
</tr> 
<tr> 
<td><input type="text" name="id" size="2" value=2 /></td> 
<td><input type="text" name="longitude" size="7"/></td> 
<td><input type="text" name="latitude" size="7"/></td> 
</tr> 
</table> 
<input type="submit" name="submit" value="SUBMIT"> 
</form> 

我想在此表PHP變量分配值,所以在bla.php

如果我使用了$id = $_REQUEST['id'];,只有最後一個值被採用,因爲有兩個輸入標籤具有相同的名稱。

因此,我可以請求這些具有相同名稱的標籤的2值到PHP?

PS不要告訴我改變輸入標籤的名稱,因爲該表位比這更復雜,它具有動態添加行: 我真正的代碼是:http://jsfiddle.net/CchES/9/

+2

如果它「有動態添加行」,是否可以簡單地向名稱附加一個整數值? – Joum

+0

您不能使用同名的輸入,否則它們將在POST數組中覆蓋彼此。 – Pitchinnate

+0

其實你錯了,因爲1)由於行是動態的,你可以簡單地通過使用替代語法的數組進行迭代2)一旦PHP遇到相同的名稱,最後一個仍然存在。所以,你無能爲力,你必須處理數組。 – Yang

回答

7

當你重複的名字,你必須給他們陣列式名稱:

<form action="bla.php" method=post> 
<table class="pv-data"> 
<tr> 
<td><input type="text" name="id[]" size="2" value=1 /></td> 
<td><input type="text" name="longitude[]" size="7"/></td> 
<td><input type="text" name="latitude[]" size="7"/></td> 
</tr> 
<tr> 
<td><input type="text" name="id[]" size="2" value=2 /></td> 
<td><input type="text" name="longitude[]" size="7"/></td> 
<td><input type="text" name="latitude[]" size="7"/></td> 
</tr> 
</table> 
<input type="submit" name="submit" value="SUBMIT"> 
</form> 

當你做到這一點,$_POST['id']$_POST['latitude']$_POST['longitude']將包含值陣列。然後

您的表單處理代碼可以遍歷這些:

for ($i = 0; $i < count($_POST['id']); $i++) { 
    if (isset($_POST['latitude'][$i], $_POST['longitude'][$i])) { // Make sure both are filled in 
    // Do stuff with this row of the form 
    } 
} 
+0

當我使用時,它給了我一個未定義的索引ID $ id = $ _POST ['id'] – maggie

+0

用戶提交表單之前還是之後? – Barmar

+0

提交表格後。我怎麼能分配一個數組到另一個數組? – maggie

9

當PHP填充$_POST ,如果多個數據片段具有相同的名稱,並且該名稱不以[]結束,則只有一個數據會存活並出現在$_POST陣列中。

重命名字段,使名稱以[]結尾。

不要告訴我改變輸入標籤的名稱,因爲該表位比這更復雜,它具有動態添加行

富有活力不應該成爲障礙名稱末尾有[]

如果你真的不能更改名稱,然後就有可能繞過$_POST完全和分析的原始數據(via php://input),但IIRC,PHP則會覆蓋,當它填充$_POST

+0

謝謝,這很有幫助 – maggie

0

快速的解決方案:

它沒有複雜更改代碼,你必須輸入標籤的名稱。剛剛嘗試這一點:

<input type="text" name="id"'+counter+' size="2" value="'+counter+'"/> 

這樣的話,你會得到的名稱,如ID-1,ID-2,ID-3 ...

+1

我知道我仍然可以使用其他名稱和類似的東西,但還有另一個功能會受到影響,並且如果它們具有不同的名稱將更難實施 – maggie

0

嘛,據我所知,有動態的行產生。但這並不意味着你不能給每行中的文本框不同的名稱。你絕對可以讓它與衆不同。我在jsfiddle中看到了你的代碼。在追加時,您只需對錶中的行數進行計數,並據此對您進行計數,您可以對其進行+1並將其存儲在一個變量中。並將該變量連接到文本框的名稱中。所以,每次都會點擊添加單位,行中的文本框會有不同的名稱。這是正確的解決方案。

+1

我知道我仍然可以使用其他名稱和類似的東西,但還有另一個功能會受到影響,如果它們有不同的名稱,將更難實施 – maggie