Reputation: 53
like the title says, when i go to users/1 it shows me the form , after i change something and press confirm it doesnt update, neither in the view or in the database.What can be the problem here?
my view edit.blade.php
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header"><h2 style="text-align:center;">Edit Your Profile</h2></div>
<div class="card-body">
<form method="post" action="{{route('users.update',$user)}}">
{{ csrf_field() }}
{{ method_field('patch') }}
<div class="form-group row">
<label for="org_name" class="col-md-4 col-form-label text-md-right">{{ __('Organisation Name ') }}</label>
<div class="col-md-6">
<input id="org_name" name="org_name" type="text" class="form-control"value="{{$user->org_name}}">
@error('org_name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label>
<div class="col-md-6">
<input id="email" type="email" class="form-control" name="email" value="{{ $user->email }}">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="username" class="col-md-4 col-form-label text-md-right">{{ __('Username') }}</label>
<div class="col-md-6">
<input id="username" type="username" class="form-control" name="username" value="{{ $user->username }}">
@error('username')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label>
<div class="col-md-6">
<input id="password" type="password" class="form-control" name="password" >
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="password-confirm" class="col-md-4 col-form-label text-md-right">{{ __('Confirm Password') }}</label>
<div class="col-md-6">
<input id="password-confirm" type="password" class="form-control" name="password_confirmation" required autocomplete="new-password">
</div>
</div>
<div class="form-group row">
<label for="country" class="col-md-4 col-form-label text-md-right">{{ __('Country') }}</label>
<div class="col-md-6">
<input id="country" type="text" class="form-control" name="country" value="{{$user->country}}">
@error('country')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="org_type" class="col-md-4 col-form-label text-md-right">{{ __('Organisation Type') }}</label>
<div class="col-md-6">
<input id="org_type" type="text" class="form-control" name="org_type" placeholder="Vet/Uni" value="{{$user->org_type}}" >
@error('org_type')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row">
<label for="depart" class="col-md-4 col-form-label text-md-right">{{ __('Department') }}</label>
<div class="col-md-6">
<input id="depart" type="text" class="form-control" name="depart" value="{{ $user->depart}}">
@error('depart')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
</div>
<div class="form-group row mb-0">
<div class="col-md-6 offset-md-4">
<button type="submit" class="btn btn-primary">
Edit
</button>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
my UserController
class UserController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function edit(User $user)
{
$user = Auth::user();
return view('users.edit', compact('user'));
}
public function update(User $user)
{
$this->validate(request(), [
'org_name' => ['required', 'string', 'max:255','unique:users'],
'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
'username' => ['required', 'string','max:255', 'unique:users'],
'password' => ['required', 'string', 'min:8', 'confirmed'],
'country' => ['required', 'string', 'max:255'],
'org_type' => ['required', 'string', 'max:255'],
'depart' => ['required', 'string', 'max:255'],
]);
$user->org_name = request('org_name');
$user->email = request('email');
$user->username = request('username');
$user->password = bcrypt(request('password'));
$user->country = request('country');
$user->org_type = request('org_type');
$user->depart = request('depart');
$user->save();
return back();
}
}
my routes
Route::get('users/{user}', ['as' => 'users.edit', 'uses' => 'UserController@edit']);
Route::patch('users/{user}/update', ['as' => 'users.update', 'uses' => 'UserController@update']);
Thanks in advance! I think its something wrong with the users/1/update route?
Upvotes: 0
Views: 83
Reputation: 1211
public function update(Rrequest $request, User $user)
{
$this->validate($request, [
'org_name' => 'required|string|max:255|unique:users,org_name,'.$user->id,
'email' => 'required|string|email|max:255|unique:users,email,'.$user->id,
'username' => 'required|string|max:255|unique:users,username,'.$user->id,
'password' => 'required|string|min:8',
'country' => 'required|string|max:255',
'org_type' => 'required|string|max:255',
'depart' => 'required|string|max:255',
]);
$user->org_name = $request->get('org_name');
$user->email = $request->get('email');
$user->username = $request->get('username');
$user->password = bcrypt($request->get('password'));
$user->country = $request->get('country');
$user->org_type = $request->get('org_type');
$user->depart = $request->get('depart');
$user->save();
return back();
}
Please user this code.
Upvotes: 1
Reputation: 1084
There's a validation rule you're not passing. With this:
'org_name' => ['required', 'string', 'max:255','unique:users'],
You're saying that the org_name
must be unique, but you must specify to be unique without itself in update.
You can try something like this:
Rule::unique('users')->ignore($user->id, 'id')
or something like this:
'org_name' => 'unique:users,org_name,id_to_ignore'
Upvotes: 0