1

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 class="form-group">
        <button type="submit" class="button is-link is-outlined" 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');
5
  • if you want to have the value of checkbox in status POST filed, then you have to give it name="status" instead of name="body". Commented Oct 31, 2021 at 15:55
  • @AdrianKokot I changed it but the problem is still the same Commented Oct 31, 2021 at 15:58
  • Also, you shouldn't setting the value property of checkbox. value should contain what you want the value to be when the checkbox is checked. Commented Oct 31, 2021 at 16:01
  • how does your model look like? Commented Oct 31, 2021 at 16:07
  • Does this answer your question? PATCH and PUT Request Does not Working with form-data Commented Oct 31, 2021 at 16:10

2 Answers 2

0

You should add status property to fillable array on User model

protected $fillable = ['status',...other properties]; 
Sign up to request clarification or add additional context in comments.

1 Comment

I already did that
0

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',...]; 

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.