Question
How can I update only 1 column
of my table with Ajax using checkbox?
Explanation
I want to use checkbox and update my active
column, the value will be either 1
or 0
. If checked value is 1
otherwise 0
.
Codes
html
<label class="switch">
<input type="checkbox" data-name="active" data-id="{{ $courier->id }}">
<span class="slider round"></span>
</label>
data-name
is name of my column
data-id
is my row id
controller function
public function Updatecourierstatus(Request $request) {
try {
$id = $request->input('id');
$field = $request->input('name');
$courier = Courier::findOrFail($id);
$courier->{$field} = //must get 1 or 0 here;
$courier->save();
} catch (Exception $e) {
return response($e->getMessage(), 400);
}
return response('', 200);
}
route
Route::post('/Updatecourierstatus', 'CourierController@Updatecourierstatus')->name('Updatecourierstatus');
});
JavaScript
not sure how to handle this part!
UPDATE
My latest codes:
script
<script>
$(function (){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$('label.switch input[type="checkbox"]').on('click', function (event) {
$.post("{{route('Updatecourierstatus')}}", {
id: $(this).data("id"),
name: $(this).data("name"),
state: $(this).is(":checked") ? 0 : 1 // toggles
}).done(function(data) {
console.log(data)
});
});
});
</script>
controller
public function Updatecourierstatus(Request $request) {
try {
$id = $request->input('id');
$field = $request->input('name');
$state = $request->input('state');
$courier = Courier::findOrFail($id);
$courier->{$field} = (int) $state;
$courier->save();
} catch (Exception $e) {
return response($e->getMessage(), 400);
}
return response('', 200);
}
html
<label class="switch">
<input class="status" type="checkbox" data-name="active" data-id="{{ $courier->id }}" {{ $courier->active == '1' ? 'checked' : ''}}>
<span class="slider round"></span>
</label>
Issues
- My switch buttons not working as expected, on for value
1
and off for value0
, the are always off. - I added
{{ $courier->active == '1' ? 'checked' : ''}}
in order to get right on and off base on values in DB, but since then my values will not change in DB they stay on their current values and not get updated
FIXED
The issue was state: $(this).is(":checked") ? 0 : 1
as "What are the PHP operators “?” and “:” called and what do they do?" explained I had to use state: $(this).is(":checked") ? 1 : 0