Sto creando una API che può aiutare l'utente ad aggiornare le proprie informazioni seguendo i dati di input. Ma quando in input json ha campo "password" si aggiornerà correttamente ma quando json non ha questo campo non posso aggiornare i dati nel database. Questo è il codice che ho usato per aggiornare i dati:Impossibile aggiornare il database quando manca il campo in 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!']);
}
}
Questo è il JSON quando tutto funziona bene:
$postData = '{ "UserId" : "1", "password":"12345", "UserName": "minhkhang", "Address": "11/200" }'
Questa è la JSON, che causerà l'errore perché manca campo password:
$postData = '{ "UserId" : "1", "UserName": "minhkhang", "Address": "11/200" }'
Questo codice ho usato per rendere stringa di aggiornamento segue json ingresso:
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;
}
Grazie.
quindi, come posso risolvere questo problema, ho provato a utilizzare isset per verificare se questa chiave è disponibile nell'array in un altro progetto, ma funziona correttamente. Non so perché questo fa un problema in questa funzione! –
Cosa restituisce se non c'è alcuna 'password' nel JSON? da solo, hai anche considerato di rimuovere l'intera sezione di codice se prevedi di non utilizzare la 'password'? o hai bisogno di usarlo ?, se lo hai già provato, lo hai considerato quando passa in $ i dati nella funzione, che se il JSON non è corrispondente quando ha provato ad applicare le chiavi ai campi, e eseguire l'AGGIORNAMENTO? I tasti potrebbero non corrispondere a quello che la tabella si aspetta? stai riscontrando errori specifici che potrebbero aiutare di più? –
Se la password non è disponibile in json o null, è necessario rimuovere la chiave. Se è disponibile devo farlo con bcrypt e impostare di nuovo l'array –