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;
}
ありがとうございます。
どのように私はこの問題を解決することができます、私はこのキーが他のプロジェクトの配列で利用できるかどうかを確認するためにissetを使用しようとしましたが、正常に動作しています。なぜこの機能に問題があるのか分かりません! –
JSONに「パスワード」がない場合はどうなりますか? 「パスワード」を使用しない場合は、コード全体を削除することも検討していますか?またはそれを使用する必要がありますか?それを試したことがある場合は、$ dataを関数に渡すときに、フィールドにキーを適用しようとしたときにJSONが一致しない場合、 UPDATEを実行しますか?テーブルが期待しているものとキーが一致しないことがありますか?もっと役立つ具体的なエラーが出ていますか? –
jsonまたはnullでパスワードが利用できない場合は、そのキーの設定を解除する必要があります。もしそれが利用可能なら、私はbcryptでハッシュし、配列 –