2015-12-30 67 views
5

我正在製作一個可以幫助用戶更新其信息的api,以跟蹤輸入數據。但是當在輸入json有字段「密碼」它會更新成功,但是當json沒有這個字段我不能更新數據庫中的數據。這是代碼我用於更新數據:在json中缺少字段時無法更新數據庫

public function updateUserInfo(Request $request){ 
     $postData = $request->all(); 
     $data = json_decode($postData['postData'], true); 
     if(isset($data['password'])){ 
      $data['password'] = bcrypt($data['password']); 
     } 
     $popData = $data['UserId']; 
     unset($data['UserId']); 
     $updateInfo = array(); 
     foreach($data as $info){ 
      if($info != null){ 
       $updateInfo[] = $info; 
      } 
     } 
     $result = DB::update(GeneralFunctions::makeUpdateString($data, 'User', ' UserId = '.$popData), $updateInfo); 
     if($result != null && $result == true){ 
      return response()->json(['success'=>true, 'data'=>'Update Successful']); 
     }else{ 
      return response()->json(['success'=>false, 'error'=>'We have encountered an error, try again later!']); 
     } 
    } 

這是當一切都正常工作的JSON:

$postData = '{ "UserId" : "1", "password":"12345", "UserName": "minhkhang", "Address": "11/200" }' 

這是這將導致錯誤的JSON,因爲它缺少密碼字段:

$postData = '{ "UserId" : "1", "UserName": "minhkhang", "Address": "11/200" }' 

這是代碼我用來做更新串跟隨輸入JSON:

public static function makeUpdateString($keyvalarr, $table, $where){ 
     $stringSQL = 'UPDATE '.$table. ' SET ' ; 
     foreach($keyvalarr as $fieldname => $updateval){ 
      if($updateval != null){ 
       $stringSQL .= $fieldname.' = ? , '; 
      } 
     } 
     $stringSQL = substr($stringSQL, 0, -2); 
     if($where != null){ 
      $stringSQL .= 'WHERE '.$where; 
     } 
     return $stringSQL; 
    } 

謝謝。

回答

2

在這裏討論的代碼是:

if(isset($data['password'])){ 
    $data['password'] = bcrypt($data['password']); 
} 

檢查,看看有什麼

isset($data['password']) 

將返回if語句之外,如果它是真實的密碼存在於JSON,而不是讓你是一個聽起來像你所期望的問題,然而檢查看看這個陳述本身是否是假的,沒有if語句,確保它沒有跳進去,它似乎是你尋找的唯一地方'password'

+0

所以我怎麼能解決這個問題,我試圖用isset來檢查這個鍵是否可用在其他項目的數組中,但它工作正常。不知道這是爲什麼這個功能出現問題! –

+1

如果JSON中沒有「密碼」,它會返回什麼?如果您打算不使用「密碼」,您是否也考慮過刪除整段代碼?或者你需要使用它嗎?如果你已經嘗試過了,你是否考慮過當它將$ data傳入函數時,如果JSON在試圖將鍵應用到字段時不匹配,運行UPDATE?密鑰可能與表所期望的不匹配?你是否收到任何可能幫助更多的具體錯誤? –

+0

如果密碼在json或null中不可用,那麼我需要取消設置該密鑰。如果是可用的,我必須用bcrypt對它進行散列並重新設置到數組 –