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;
}
謝謝。
所以我怎麼能解決這個問題,我試圖用isset來檢查這個鍵是否可用在其他項目的數組中,但它工作正常。不知道這是爲什麼這個功能出現問題! –
如果JSON中沒有「密碼」,它會返回什麼?如果您打算不使用「密碼」,您是否也考慮過刪除整段代碼?或者你需要使用它嗎?如果你已經嘗試過了,你是否考慮過當它將$ data傳入函數時,如果JSON在試圖將鍵應用到字段時不匹配,運行UPDATE?密鑰可能與表所期望的不匹配?你是否收到任何可能幫助更多的具體錯誤? –
如果密碼在json或null中不可用,那麼我需要取消設置該密鑰。如果是可用的,我必須用bcrypt對它進行散列並重新設置到數組 –