2012-06-10 92 views
3

在一個非常長的產品列表中,我創建了一個表格。每一行都應該可以更新。如果我在一個表中放置多個表單,HTML無效。一個解決方案是爲每一行創建一個表,但格式會非常難看。多個表格在一個HTML表格中

我想使這個:

<table> 
<tr><form><td><input type=\"text\" name=\"name\" value=\"".$row['name']."\" /></td>\n"; 
</td><td></td>....<td><input type=\"submit\" name=\"Submit_btn\" id=\"Submit_btn\" value=\"Update\"></td></tr></form> 
<tr><form><td></td><td></td>....<td><input type=\"submit\" name=\"Submit_btn\" id=\"Submit_btn\" value=\"Update\"></td></tr></form> 
. 
. 
. 
</table> 

它是無效的。我能做什麼?

回答

2

在整個表格中使用一種形式。

過濾出到達服務器後不需要的數據。

+0

問題是要濾除變化在哪裏。否則,我必須更新或多或少更新整個表格。 – Manuel

0

使用id來指定行。 也發送更改的行的ID到服務器進行過濾。

1

如果你想這樣做,跨瀏覽器,而無需使用javascript:

使用不同的名稱提交按鈕的每一行,在名稱中包含的ID信息。像

<input type="submit" name="id[589] value="update this row"> 

只要用戶無論點擊那個提交按鈕,或選項卡按鈕TPO給它對焦,然後按下回車,瀏覽器將可靠地發送提交按鈕的名稱(只提交按鈕),然後就可以通過

$id = key($_POST['id']); 

得到了ID,但是,問題是,如果用戶通過輸入鍵提交表單,當表單重點是不同類型的輸入元素,像type=text例如。表單將提交,但不同的瀏覽器要麼

1)發送沒有名字的任何提交按鈕可言,

2)或他們將派出第一個提交按鈕的名稱出現在表單的HTML源代碼。

如果你把一個虛擬的形式開始提交按鈕,並隱藏W/CSS,那麼你就可以可靠地通過

isset($_POST['dummySubmit']); 

不能執行更新檢測這類表單提交,但你可以將所有發佈的值輸出回給用戶(以便他們的工作不會丟失),同時還會顯示一條消息,告訴他們需要明確單擊提交按鈕,然後讓他們再試一次。

或... 您可以放棄使用單個按鈕,每次更新每條記錄,這可能並不像您想象的那麼糟糕。我不認爲通常會試圖篩選出某些嘗試減少sql查詢時記錄已發生變化的通常很多好處。但是,如果你真的想要,也許發送行數據連接在一起的md5散列,然後在提交和比較時重新輸入散列。

+0

我想我可以用這個解決方案。謝謝大家! – Manuel