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