@itgoldmart do you get user when you do User::find($id)? And for update route method should be patch instead of post.
Nov 21, 2022
17
Level 1
Cannot update user
I just created a user edit page, but when I submit it doesn't change.
This is my link to edit:
<a href="{{route('userEdit', $user->id)}}" class="text-primary"><i class="fa fa-edit"></i></a>
This is my route:
Route::group(['prefix' => 'admin/', 'middleware' => ['role:developer|admin']], function()
{
Route::get('dashboard', 'AdminController@dashboard')->name('adminDashboard');
Route::get('manage/user/index', 'AdminController@userIndex')->name('userIndex');
Route::get('manage/user/create', 'AdminController@userCreate')->name('userCreate');
Route::post('manage/user/store', 'AdminController@userStore')->name('userStore');
Route::get('manage/user/edit/{id}', 'AdminController@userEdit')->name('userEdit');
Route::post('manage/user/update/{id}', 'AdminController@userUpdate')->name('userUpdate');
});
This is my controller:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use App\Role;
use File;
class AdminController extends Controller
{
public function __construct()
{
$this->middleware('auth');
$this->middleware(['role:developer|admin']);
}
public function dashboard()
{
return view('admin.dashboard');
}
public function userIndex()
{
$users = User::orderBy('id', 'desc')->paginate(10);
return view('admin.manage.user.index', compact('users'));
}
public function userEdit($id)
{
$users = User::find($id);
$roles = Role::all();
return view('admin.manage.user.edit', compact('users', 'roles'));
}
public function userUpdate(Request $request, $id)
{
// Menyiapkan data gambar yang diupload ke variabel $file
$file_name = $request->hidden_image;
$file = $request->file('file');
if($file !='')
{
$this->validate($request,[
'name' => 'required|alpha|max:255',
'email' => 'required|email|unique:users',
'password' => 'required',
'file' => 'required|file|image|mimes:jpeg,jpg,png|max:1048'
]);
// Menyiapkan data gambar yang diupload ke variabel $file
$file_name = time()."_".$file->getClientOriginalName();
// Isi dengan nama folder tempat kemana file diupload
$upload_directory = 'p_users';
$file->move($upload_directory, $file_name);
// Hapus file
$gambar = User::where('id',$id)->first();
File::delete(public_path('p_user/'.$gambar->file));
}
else
{
$this->validate($request,[
'name' => 'required|alpha|max:255',
'email' => 'required|email|unique:users',
'password' => 'required'
]);
}
$users = User::find($id);
$users->name = $request->name;
$users->email = $request->email;
$users->password = bcrypt($request->password);
$users->file = $file_name;
$users->save();
$users->syncRoles(explode(',', $request->roles));
return redirect()->route('userIndex');
}
}
This is my edit form:
<!-- Form start -->
<form action="{{route('userUpdate', $users->id)}}" method="post" enctype="multipart/form-data">
{{csrf_field()}}
<div class="box-body">
<div class="row">
<div class="col-md-3">
<div class="form-group">
<label>Fullname</label>
<input type="text" value="{{$users->name}}" name="name" class="form-control">
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label>Email address</label>
<input type="email" value="{{$users->email}}" name="email" class="form-control">
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label>Password</label>
<input type="password" value="{{$users->password}}" name="password" class="form-control">
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label>Roles</label>
<select class="form-control" name="roles">
<option disabled selected>Choose</option>
@foreach ($roles as $role)
<option value="{{$role->id}}" {{$role->id == $role->id ? 'selected' : ''}}>{{$role->display_name}}</option>
@endforeach
</select>
</div>
</div>
<div class="col-md-3">
<div class="form-group">
<label>Profile Picture</label>
<div>
<img src="{{ url('p_users/'.$users->file) }}" width="100">
</div>
<input type="file" name="file" class="form-control-file">
<input type="hidden" name="hidden_image" value="{{$users->file}}">
</div>
</div>
</div>
</div>
<div class="box-footer">
<button type="submit" class="btn btn-primary">Save change</button>
</div>
</form>
Please or to participate in this conversation.