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');
brombeer
  • 8,716
  • 5
  • 21
  • 27
marry
  • 51
  • 1
  • 10
  • 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"`. – Adrian Kokot Oct 31 '21 at 15:55
  • @AdrianKokot I changed it but the problem is still the same – marry Oct 31 '21 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. – Adrian Kokot Oct 31 '21 at 16:01
  • how does your model look like? – sid Oct 31 '21 at 16:07
  • Does this answer your question? [PATCH and PUT Request Does not Working with form-data](https://stackoverflow.com/questions/50691938/patch-and-put-request-does-not-working-with-form-data) – Ahmed Magdy Oct 31 '21 at 16:10

2 Answers2

0

You should add status property to fillable array on User model

protected $fillable = ['status',...other properties]; 
Zrelli Majdi
  • 1,204
  • 2
  • 11
  • 16
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',...]; 
Milad pegah
  • 321
  • 1
  • 8