2013-02-27 71 views
0

我正在嘗試創建一個頁面,該頁面將顯示錶中的項目以及每個項目的所有字段。目的是讓用戶可以在線更新項目的詳細信息。表單同時更新數據庫的多個項目

我的桌子上有大約14個字段,並且正在計劃像下面這樣做。它有道理嗎?或者是否有更有效的方法來做到這一點?

<form> 
(query all items in table) 
while (...) { 
    <span class="details">NAME: </span> 
    <input name="name" value="<?php echo $info['name']; ?>"> 
    <span class="details">CATEGORY: </span> 
    <input name="category" value="<?php echo $info['category']; ?>" 
... 
... and so on 12 more times 
} 
<button to submit the form> 
</form> 

然後,我想在數據庫中只更新那些已由用戶更新的字段。我應該逐個檢查每個字段嗎?還是有更簡單的方法來做到這一點?

謝謝!

回答

1

我目前使用此代碼爲禁用,不是改變所有領域:

<script> 
$(function() { 
    $('.input').change(function() { 
     $(this).addClass('changed'); 
    }); 
    $('input[type=submit]').click(function(){ 
    $('form').find('.input:not(.changed)').attr("disabled", "disabled"); 
    }); 
}); 
</script> 

我說「輸入」類的所有表單元素(選擇,文本區域,輸入等),然後,該腳本看他們如果他們改變,那麼它會添加另一個名爲'changed'的類,稍後,當點擊提交按鈕時,該腳本將禁用所有未更改的元素。

+0

這是一個好主意!謝謝!只有一個問題,我將如何獲得PHP提交的值?我是否必須發送所有發送的輸入並查看它們是否爲空? – samyb8 2013-02-28 18:17:18

+0

是的,當然,你必須檢查所有提交的數據... – 2013-02-28 21:48:08

0

Akam的答案很精彩 - 對未改變的輸入元素應用disabled =「disabled」實際上會阻止它們被提交,並且只有已更改的變量纔會發送到服務器。

我在這裏添加的是... .changed這裏已經檢查提交/輸入的值是否與原始值不同。但你也可以輕鬆地在提交時比較原始值的值(例如===,或者如果你已經想做一些衛生/驗證,你可以使用正則表達式等)

這是所有優雅的javascript或jQuery)的解決方案,但我已經看到(愚蠢;-)人也在服務器端進行比較(例如使用php)。然而,你要麼來回反彈原始值 - 這並不是很糟糕(這意味着:你必須將新值和舊值傳回服務器 - 但不要再從數據庫中讀取它們 - 然後你會鬆動比如果你只是更新數據庫中的所有表單值)。