2015-12-30 6 views
5

Tworzę api, które mogą pomóc użytkownikowi zaktualizować swoje informacje zgodnie z danymi wejściowymi. Ale kiedy w polu wejściowym json ma pole "hasło", to zostanie ono zaktualizowane pomyślnie, ale gdy json nie ma tego pola, nie mogę zaktualizować danych w bazie danych. Jest to kod użyłem zaktualizować dane:Nie można zaktualizować bazy danych, gdy brakujące pole w jsonie

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!']); 
     } 
    } 

Jest to json, gdy wszystko działa prawidłowo:

$postData = '{ "UserId" : "1", "password":"12345", "UserName": "minhkhang", "Address": "11/200" }' 

To json co spowoduje błąd, ponieważ brakuje polu hasło:

$postData = '{ "UserId" : "1", "UserName": "minhkhang", "Address": "11/200" }' 

jest to kod I używany do aktualizacji śledzić ciąg json wejściowy:

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; 
    } 

Dziękuję.

Odpowiedz

2

Kod mowa jest tutaj:

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

Sprawdź, co

isset($data['password']) 

wraca poza if, jeśli to prawda o hasło jest obecny w JSON i nie dając masz problem, który brzmi jak to, czego można się spodziewać, jednak sprawdź, czy to samo zdanie jest fałszywe bez instrukcji if, upewnij się, że nie jest to wciąż przeskakiwanie, wydaje się być jedynym miejscem, w którym szukasz 'password'

+0

więc jak mogę rozwiązać ten problem, próbowałem użyć isset, aby sprawdzić, czy ten klucz jest dostępny w tablicy w innym projekcie, ale działa dobrze. Nie wiem, dlaczego powoduje to problem w tej funkcji! –

+1

Co zwraca, jeśli nie ma "hasła" w JSON? samodzielnie, czy rozważyłeś także usunięcie całej sekcji kodu, jeśli nie zamierzasz używać "hasła"? lub czy musisz go użyć ?, jeśli już próbowałeś, czy uważasz, że kiedy przekazuje $ dane do funkcji, że JSON nie pasuje, gdy próbował zastosować klucze do pól, i uruchomić UPDATE? Czy klucze mogą być niedopasowane, czego oczekuje stół? czy otrzymujesz jakieś konkretne błędy, które mogą pomóc więcej? –

+0

Jeśli hasło nie jest dostępne w json lub null, muszę usunąć ten klucz. Jeśli jest dostępna, muszę zaszyfrować go za pomocą bcrypt i ustawić ponownie na tablicę –