Home > Blockchain >  laravel checkbox doesn't update to database laravel
laravel checkbox doesn't update to database laravel

Time:11-01

I want to update the user status in my laravel project with a checkbox. If I change the value in the database it show's up on my checkbox. But if I change it with in my website with a form the status remains the same. I think something might be wrong with my controller. Can someone help?

In my view:

<form action="{{ route('users.change_status', $user) }}" class="form" method="post">
    {{ csrf_field() }}
    @method('PATCH')
    <label>body</label>
    <input type="checkbox" class="form-control" name="status" value="{{$user->status}}" @if($user->status) checked @endif>
    <div hljs-string">">
        <button type="submit" hljs-string">" value="{{$user->status}}" >>Update</button>
    </div>
</form>

In my controller:

    public function change_status(Request $request, User $user)
        {
            //dd($user);

            // Validate posted form data
            $validated = $request->validate([
                'status' => 'required',
            ]);

            if (!$validated) { return redirect()->back();}
            $user->update($request->all());

            return redirect()->back();

        }

And my routes in web.php:

Route::get('/users', [UserController::class, 'index'])->name('users.index');
Route::patch('/change_status/{user}', [UserController::class, 'change_status'])->name('users.change_status');

CodePudding user response:

You should add status property to fillable array on User model

protected $fillable = ['status',...other properties]; 

CodePudding user response:

First in your code you have some spams(in controller) and some syntax error (in html).

html

Extra > in button, change to this:

<button type="submit" class="button is-link is-outlined" value="{{$user->status}}" >Update</button>

controller

You dont need to assessment the validation to an new varaible, because the validation if has errorm automaticly return back the request, so you don't need the if statement and also the update method accepts array as input, change your code to this:

$request->validate([
                'status' => 'required',
            ]);
    $user->update([$request->all()]);

if your status column(in databas) is boolean, you most change the status request, because the checkbox value on checked is on and on uncheck is null so you most use this code:

$request->validate([
                'status' => 'required',
            ]);
    if(isset($request->status)){
        $status = true;
    }else{
        $status = false;
    }
    $user->update([
        'status' => $status,
    ]);

It's will be work, else, check your model fillable and add the status field to that:

protected $fillable = ['status',...]; 
  • Related