2013-04-02 75 views
0

我有一個很多列表框的表單。提交表單後,我沒有問題在PHP中循環處理所有列表框。但是我正在尋找一種方法來只抓住那些已經改變的東西,因爲這會節省大量的處理時間。PHP只更改列表框

假設我有一百個列表框。他們的ID是「lb_1」...「lb_100」。我會遍歷他們喜歡:但

foreach($_POST as $key=>$value) { 
    if (substr($key,0,3)== "lb_") { 
     ...do something... 
    } 
} 

這個循環會做一些與所有百倍列表框的值。我只想抓住那些已經發生變化的人。

任何想法?

+1

我認爲你可以做到這一點的唯一方法是在客戶端使用JavaScript來發送更改的框。 – Tushar

+0

那麼,當用戶訪問帶有所有表單元素的頁面時,它們將被渲染爲特定的值。這意味着您可以訪問PHP中的值。所以,你不能只是從例如你的數據庫,然後檢查它們是否在你的$ _POST數組中提交? – hurrtz

+0

嗨,這實際上是我現在正在做的事情。我將所有列表框的值與數據庫中的值進行比較,只有在不同的情況下,我才能在數據庫中設置新的值。我只想保存所有比較操作。 – George

回答

0

要擴展@Tushar給出的建議,可以使用Javascript將Disabled屬性設置爲true,以表示任何未更改的字段。這樣他們就不會在POST中存在。要知道禁用哪一個的唯一方法是存儲初始值(在JS中可能爲了便於比較)。然後在表單提交中,遍歷字段並禁用所有未更改的字段。

document.getElementById('lb_1').disabled = true; // example of how to disable field 

我可以提供更多示例代碼,如果你喜歡。

+0

嗨Revent,謝謝你的想法。我會嘗試。我實際上嘗試使用onchange事件來更改列表框的名稱,希望只有那些名稱可以被PHP循環捕獲。顯然$ _POST數組只包含原始名稱。客戶端重命名不通過。 – George

0

好,感謝您的建議,我想出了這個客戶端解決方案:

我包含原始值的每個列表框之前添加一個隱藏的表單文本字段。隱藏字段和列表框用相同的唯一後綴命名,所以我知道哪一個屬於哪個。

當表單通過PHP循環如下所示:

foreach($_POST as $key=>$value) { 
    if (substr($key,0,3)== "lb_") { 
     if ($_POST[hidden_name] != $value) { 
     setNewValue($value); 
     } 
    } 
} 

這是很多不是訪問數據庫中的每個比較快,因爲值已經是$ _POST陣列中可用。

感謝您的幫助。