2012-01-12 78 views
0

我有一個帳戶設置頁面,將檢測到任何更改的字段,並通過jquery.ajax提交這些領域的PHP文件,PHP文件引入口,並驗證了一些不同的情況下,每場並且如果它們中的任何一個拋出錯誤,則返回錯誤,退出並且要求用戶重新輸入該字段。這一切工作正常... ...但是更新只能從賬戶設置頁面提交的領域

我有我的如何建立一個循環只更新所提交的領域的問題。目前,PHP文件具有這樣的結構:

Check for ajax request { 
    Validate fields... 
    Update Fields... 
} 

我的「更新域」的代碼看起來像這樣和它不會以這種方式工作,我知道:

// grab all variables except passwords 
$email = mysql_real_escape_string($_POST['email']); 
$newpass = mysql_real_escape_string(md5($_POST['newpass'])); 
$bname = mysql_real_escape_string($_POST['bname']); 
$bemail = mysql_real_escape_string($_POST['bemail']); 
$sql = "UPDATE usertable SET email='$email', password='$newpass', bname='$bname', bemail='$bemail' WHERE username = '$user'"; 
mysql_query($sql); 
$msg = "Account updated successfully."; 

      header('Cache-Control: no-cache, must-revalidate'); 
      header('Expires: '.date('r', time()+(86400*365))); 
      header('Content-type: application/json'); 

      echo json_encode(array(
       'valid' => yes, 
       'msg' => $msg, 
      )); 
      exit(); 

有問題的行是$ sql =「更新usertable ...」行。我如何編寫一個PHP循環來獲取所有發佈的變量作爲數組,並以某種方式使用它們來構建更新查詢字符串...如果你需要其他任何東西讓我知道。問了很多,但我一直在思考四個小時,並沒有找到一種方法來做到這一點,沒有太多的非直接編碼運行。

另外:有沒有辦法來回報所有未經驗證的領域?一般的想法,如使用數組和每個循環或什麼?目前如果我們說,電子郵件字段和密碼字段不驗證,它只顯示需要重新輸入的電子郵件字段,因爲它首先顯示在php文件中。我寧願告訴他們所有沒有驗證的字段。我知道它只是與我的代碼的位置和我只是手動編碼每個驗證(這是很長的路)的方式有關,所以對此的任何洞察都將幫助我創建一個BILLION,尤其是在後端的未來頁面上。

任何幫助的感謝你們!

回答

1

這將只更新它們的$_POST陣列內和$fieldsToUpdate(這樣你就可以排除字段)中定義的字段:

$user = mysql_real_escape_string($user); 
$fieldsToUpdate = array('email', 'bname','bemail'); 
$set = array(); 
foreach($_POST as $key=>$value){ 
    if(in_array($key,$fieldsToUpdate)){ 
     $set[] = $key."='".mysql_real_escape_string($value)."'"; 
    } 
} 

if(count($set) > 0){ 
    $query = "UPDATE usertable SET ".implode(',',$set)." WHERE username = '$user'"; 
    // rest of your code; 
} 

此外,mysql_real_escape_string()已被棄用,考慮使用PDO

+0

任何建議關於如何從ajax請求(所有編輯的字段中)獲取序列化的字符串並將其分解爲一組字段以便udpate?除此之外,這似乎是它的工作非常適合我的需要... 另外,關於建立響應清單,以便它可以說什麼「這這,這是更新的,這是沒有更新」?或者我應該只是不提交任何東西,如果需要驗證,只有當所有字段驗證是否編輯了多個字段時更新提交的字段? 選擇你的答案,謝謝你! – 2012-01-12 06:57:24