2016-08-20 4 views
0

アイデアが不足しています。私は自分のデータベースのユーザレコードを更新するコントローラメソッドを持っています。Laravel 5 - ユーザーを更新するとdbのパスワードフィールドが削除される

現在のユーザーが氏名、ユーザー名、電子メール、パスワードを入力できるフォームがあります。パスワード以外のすべてのフィールドには、保存された値があらかじめ入力されています。

ユーザーがパスワードフィールドを空白のままにすると、現在のパスワードが上書きされます。もちろん、私はempty()isset()で何かを試しました。ここで

は私のコントローラのメソッドです:

public function update($user_id, Request $request){ 
    if(Auth::user()->canUpdateUser($user_id)){ 
     $user = User::find($user_id); 

     $inputs = $request->all(); 

     foreach($inputs as $key => $value){ 
      if($key === 'password' && !empty($inputs[$key])) { 
       $validator = Validator::make($inputs, [ 
        'password' => 'confirmed|required' 
       ]); 
       if ($validator->fails()) { 
        return back()->withErrors($validator)->withInput(); 
       } else { 
        $user->$key = bcrypt($value); 
       } 
      } elseif($key === 'password_confirmation' || $key === '_token'){ 
       // Nothing 
      } elseif($key === 'username') { 
       $validator = Validator::make($request->all(), [ 
        'username' => 'unique:users,username,' . $user->id 
       ]); 
       if($validator->fails()){ 
        return back()->withErrors($validator)->withInput(); 
       } else { 
        $user->$key = $value; 
       } 
      } elseif($key === 'email'){ 
       $validator = Validator::make($request->all(), [ 
        'email' => 'unique:users,email,' . $user->id 
       ]); 
       if($validator->fails()){ 
        return back()->withErrors($validator)->withInput(); 
       } else { 
        $user->$key = $value; 
       } 
      } else { 
       echo $key, "<br>"; 
       $user->$key = $value; 
      } 
     } 

     $user->save(); 
     //return back()->with('success', 'Deine Daten wurden geändert'); 
    } else { 
     abort(401); 
    } 
} 

答えて

0

なぜ各変数をループのために? 2つのフィールドが間違っていても、一度に1つのエラーだけを返します。 (パスワードフィールドなしで)通常どおりユーザーを検証して更新し、パスワード部分の条件チェックを行います。

public function update($user_id, Request $request){ 
    if(Auth::user()->canUpdateUser($user_id)){ 
     $user = User::find($user_id); 

     $fields = $request->except('password'); 
      $validator = Validator::make($fields, [ 
       'email' => 'unique:users,email,' . $user->id, 
       'username' => 'unique:users,username,' . $user->id 
      ]); 
      if($validator->fails()){ 
       return back()->withErrors($validator)->withInput(); 
      } else { 
       $user->update($fields); 
      } 
     } 

     $pw = $request->get('password', ''); 

     if(str_len($pw) && $pw == $request->get('password_confirmation')){ 
      $user->pw = bcrypt($pw); 
     } 

     $user->save(); 

     return back()->with('success', 'Deine Daten wurden geändert'); 
    } else { 
     abort(401); 
    } 
+0

ありがとう、ありがとう!私は$ request-> except() '-function :)を認識していませんでした。 – Brotzka

関連する問題