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对它进行散列并重新设置到数组 –