Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Post checkbox value's when using dynamic fields

I'm building a task list where I can add and delete fields dynamically for each user. The problem I have, is saving the data from the checkbox.

I'm using the following code:

<form>    
    @foreach($tasks as $task)
    <div class="col-md-9">
        <input id="taskfield" name="dynamic[]" value="{{ $task->name }}" class="form-control field" type="text">
    </div> 
    <div class="col-md-3">
        <div class="slideOne">
            <input type="checkbox" value="1" id="slideOne" name="check[]"  @if($task->finished == 1) checked @endif/>


        <label for="slideOne"></label>
            </div>
     </div>
     @endforeach
     /*The JS will add the new items here. JS example:*/
      <div class="col-md-9">
            <input id="taskfield" name="dynamic[]" value="{{ $task->name }}" class="form-control field" type="text">
      </div> 
      <div class="col-md-3">
            <div class="slideOne">
                <input type="checkbox" value="1" id="slideOne" name="check[]"  @if($task->finished == 1) checked @endif/>
                <label for="slideOne"></label>
            </div>
      </div>
</form>

For saving it dynamically, I'm using this in my controller:

DB::table('tasks')->where('user_id', '=', $_POST['uid'])->where('week', '=', $_POST['week'])->where('year', '=', $_POST['year'])->delete();
if(isset($_POST['dynamic'])){
    $takenvdweek = $_POST['dynamic'];
    $finished = $_POST['check'];
    var_dump($finished);
    foreach($takenvdweek as $key => $value) {
        DB::insert('insert into tasks (name, finished, user_id, week, year) values (?, ?, ?, ?, ?)', array($value, $finished[$key], $_POST['uid'], $_POST['week'], $_POST['year']));    
    }
}

So my Saving method requires always a value for the checkbox, 0 when unchecked and 1 when checked. I tried it with a hidden field with a 0, but it didn't work because the 0 was always in the POST array. Also when I click the a label, the first foreach label is changing, not the second where I click on. I tried to fix this with a class, but was no success.

Edit: The foreach is for tasks that exists, but I can also add new items with a piece op JS, they are also inside the form, so I can't give them a foreach-id. I updated my question with the JS example.

like image 937
JS-NL Avatar asked Feb 24 '26 00:02

JS-NL


1 Answers

Try to set the task id as index of dynamic and check

See below

@foreach($tasks as $task)
<div class="col-md-9">
    <input id="taskfield" name="dynamic[$task->id]" value="{{ $task->name }}" class="form-control field" type="text">
</div> 
<div class="col-md-3">
    <div class="slideOne">
        <input type="checkbox" value="1" id="slideOne" name="check[$task->id]"  @if($task->finished == 1) checked @endif/>
        <label for="slideOne"></label>
    </div>
</div>
@endforeach

--Edit--- if task id is not available then you can set index like below

$index = 0;
@foreach($tasks as $task)
    <div class="col-md-9">
        <input id="taskfield" name="dynamic[$index]" value="{{ $task->name }}" class="form-control field" type="text">
    </div> 
    <div class="col-md-3">
        <div class="slideOne">
            <input type="checkbox" value="1" id="slideOne" name="check[$index]"  @if($task->finished == 1) checked @endif/>
            <label for="slideOne"></label>
        </div>
    </div>
$index++;
    @endforeach
like image 139
Aamir Sarwar Avatar answered Feb 25 '26 18:02

Aamir Sarwar



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!