2012-06-24 141 views
0

我將舉例說明用戶配置文件編輯頁面。內部有12個不同的領域(年齡,性別,吸菸,飲酒......)。所有這些字段都在單個表中。當用戶保存數據時,即使只有一個字段被更改,mysql update語句也會用於設置所有數據。用戶更新配置文件和mysql更新

UPDATE profile SET age=22, smoke=1, drink=1, ... 

但我想知道這是否是一種正確的方法。首先檢查哪個字段已更改,並且僅爲此字段設置數據是否更好?要做到這一點,我會把所有當前值放在隱藏輸入中。它看起來像這樣:

<input type="hidden" name="oldAge" value="<?php echo $age; ?>" /> 
<input type="text" name="age" value="<?php echo $age; ?>" /> 
<input type="hidden" name="oldGender" value="<?php echo $gender; ?>" /> 
<input type="text" name="gender" value="<?php echo $gender; ?>" /> 

<?php 
//... 
if($_POST['oldAge']!=$_POST['age']){ 
    $updateQuery .= ", age=$_POST['age']"; 
} 
if($_POST['oldGender']!=$_POST['gender']){ 
    $updateQuery .= ", gender=$_POST['gender']"; 
} 
//... 
?> 

通過這種方式設置更少的數據,這可以使MySQL更好的性能。這是否有意義,還是隻是不必要的複雜的事情?

+0

您是對的,請檢查哪些字段已被更改並僅設置那些字段以保存不必要的更新。 –

+0

這個問題可能是重複的[http://stackoverflow.com/questions/459669](http://stackoverflow.com/questions/459669) –

+0

是的你是對的,我錯過了,我aplogy。 – user1324762

回答

0

我使用javascript jquery進行檢查,因爲我已經使用它來發送帶有ajax的發佈數據。

var oldValues = $('form').serialize().split("&"); 
var values = '';   
var valChanged = false; 
var curValues = ''; 
$("input[type='submit']").click(function() { 
    $(this).closest('form').submit(function() { 
     curValues = $(this).serialize().split("&"); 
     for(var i in curValues){   
      valChanged = false;   
      for(var i2 in oldValues){ 
      if(oldValues[i2].split("=")[0]==curValues[i].split("=")[0] && (oldValues[i2].split("=")[1])!=(curValues[i].split("=")[1])){ 
       valChanged = true; 
       break; 
      } 
      } 
      if(valChanged==true){ 
      values = values+curValues[i]+"&"; 
      }   

     } 

     $.ajax({ 
      type: "POST", 
      url: $(this).closest('form').attr('action'), 
      data: values, 
      success: function(msg){        
       //saving done 
       closeDialog(200);        
      }   
     });  
     return false;   
    }); 
}); 
0

你只是讓事情變得複雜,你可以寧願做的只是保持領域的'年齡',並回應它的老年。一旦用戶更改值併發送表單,只需更新數據中的值即可。 要檢查它是否與之前相同,請將javascript驗證應用於更改,並在用戶未提交任何值的情況下提交表單時提示「未做任何更改」。

希望這會有所幫助。