2015-12-30 9 views
5

私はユーザーの入力情報に基づいて情報を更新するのに役立つAPIを作成しています。しかし、入力jsonにフィールド "password"があると正常に更新されますが、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

ここに問題のコードは次のとおりです。それはパスワードがJSONに存在していると与えないために真である場合

isset($data['password']) 

は、if文の外に戻っているかを確認するには

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

チェックあなたはあなたが期待しているように聞こえるが、if文がなくてもその文自体が偽であるかどうかを確認し、まだそれにジャンプしていないことを確認する。それはあなたが探している唯一の場所であるようだ。'password'

+0

どのように私はこの問題を解決することができます、私はこのキーが他のプロジェクトの配列で利用できるかどうかを確認するためにissetを使用しようとしましたが、正常に動作しています。なぜこの機能に問題があるのか​​分かりません! –

+1

JSONに「パスワード」がない場合はどうなりますか? 「パスワード」を使用しない場合は、コード全体を削除することも検討していますか?またはそれを使用する必要がありますか?それを試したことがある場合は、$ dataを関数に渡すときに、フィールドにキーを適用しようとしたときにJSONが一致しない場合、 UPDATEを実行しますか?テーブルが期待しているものとキーが一致しないことがありますか?もっと役立つ具体的なエラーが出ていますか? –

+0

jsonまたはnullでパスワードが利用できない場合は、そのキーの設定を解除する必要があります。もしそれが利用可能なら、私はbcryptでハッシュし、配列 –

関連する問題