Post 使用动态字段时的复选框值
Post checkbox value's when using dynamic fields
我正在构建一个任务列表,我可以在其中为每个用户动态添加和删除字段。我遇到的问题是从复选框中保存数据。
我正在使用以下代码:
<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>
为了动态保存它,我在我的控制器中使用了它:
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']));
}
}
所以我的保存方法总是需要复选框的值,未选中时为 0,选中时为 1。我用带有 0 的隐藏字段尝试了它,但它不起作用,因为 0 总是在 POST 数组中。此外,当我单击 a 标签时,第一个 foreach 标签正在更改,而不是我单击的第二个标签。我试图用 class 解决这个问题,但没有成功。
编辑:
foreach 用于存在的任务,但我也可以使用一块 op JS 添加新项目,它们也在表单内,所以我不能给它们一个 foreach-id。我用 JS 示例更新了我的问题。
尝试将task id设置为动态索引并检查
见下文
@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
--编辑---
如果任务 ID 不可用,那么您可以像下面这样设置索引
$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
应该这样做:
@foreach($clubs as $club)
<input type="checkbox"
id="{{$club->getCode()}}"
name="clubs[]"
value="{{$club->getId()}}" /> {{$club->getName()}}<br>
@endforeach
我正在构建一个任务列表,我可以在其中为每个用户动态添加和删除字段。我遇到的问题是从复选框中保存数据。
我正在使用以下代码:
<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>
为了动态保存它,我在我的控制器中使用了它:
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']));
}
}
所以我的保存方法总是需要复选框的值,未选中时为 0,选中时为 1。我用带有 0 的隐藏字段尝试了它,但它不起作用,因为 0 总是在 POST 数组中。此外,当我单击 a 标签时,第一个 foreach 标签正在更改,而不是我单击的第二个标签。我试图用 class 解决这个问题,但没有成功。
编辑: foreach 用于存在的任务,但我也可以使用一块 op JS 添加新项目,它们也在表单内,所以我不能给它们一个 foreach-id。我用 JS 示例更新了我的问题。
尝试将task id设置为动态索引并检查
见下文
@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
--编辑--- 如果任务 ID 不可用,那么您可以像下面这样设置索引
$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
应该这样做:
@foreach($clubs as $club)
<input type="checkbox"
id="{{$club->getCode()}}"
name="clubs[]"
value="{{$club->getId()}}" /> {{$club->getName()}}<br>
@endforeach