2015-12-30 10 views
5

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.

risposta

2

Il codice in questione qui è:

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

controllare per vedere che

isset($data['password']) 

sta tornando al di fuori l'istruzione if, se è vero per la parola d'essere presenti nel JSON e non dare hai un problema che suona come quello che ti aspetteresti, tuttavia controlla se questa affermazione è falsa senza la dichiarazione if, assicurati che non stia ancora saltando dentro, sembra essere l'unico posto in cui stai cercando 'password'

+0

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! –

+1

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ù? –

+0

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 –

Problemi correlati