You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何结合复选框插入多组文本输入数据?

问题描述

需要根据用户输入将数据插入数据库,页面包含多个复选框及对应文本输入框。当前代码仅选中“A”时能正常插入,选中其他选项或多个选项时会出现空值。期望实现的数据库插入效果如下:

checkval  win  loss  draw
       A       2    3     4
       B       3    4     3
       C       4    5     5

原表单代码:

<form action="">
    <input type="checkbox" name="txt_check[]" id="">A
    <label for="fname">Win1:</label>
    <input type="text" id="fname" name="txt_win[]"><br><br>
    <label for="fname">Win2:</label>
    <input type="text" id="fname" name="txt_loss[]"><br><br>
    <label for="fname">Win3:</label>
    <input type="text" id="fname" name="txt_draw[]"><br><br>

    <input type="checkbox" name="txt_check[]" id="">B
    <label for="lname">Loss1:</label>
    <input type="text" id="fname" name="txt_win[]"><br><br>
    <label for="lname">Loss2:</label>
    <input type="text" id="fname" name="txt_loss[]"><br><br>
    <label for="lname">Loss3:</label>
    <input type="text" id="fname" name="txt_draw[]"><br><br>

    <input type="checkbox" name="txt_check[]" id="">C
    <label for="lname">Draw1:</label>
    <input type="text" id="fname" name="txt_win[]"><br><br>
    <label for="lname">Draw2:</label>
    <input type="text" id="fname" name="txt_loss[]"><br><br>
    <label for="lname">Draw3:</label>
    <input type="text" id="fname" name="txt_draw[]"><br><br>
    <input type="submit" value="Submit">
</form>

原控制器代码:

$win = $request->txt_win;
$loss = $request->txt_loss;
$draw = $request->txt_draw;
$checkValue =  $request->txt_check ;
foreach ($checkValue as $key => $value) {

$result[] = Model::create([
                
     'checkValue' => $value, 
     'winning' => $win [$key],
     'lost' => $loss [$key],
     'draw' => $draw [$key],
                
         ]);
   }

解决方案

问题根源是:未选中的复选框不会被提交,但所有输入框都会提交,导致复选框数组和输入框数组的索引错位,进而出现空值插入。需要让每个选项的复选框与输入框建立明确的关联。

1. 修改表单代码

给复选框设置固定value,并将对应输入框的命名改为结构化数组,确保每个选项的win/loss/draw绑定到同一标识下:

<form action="" method="post">
    <!-- Laravel环境下必须添加CSRF令牌 -->
    @csrf

    <input type="checkbox" name="selected_items[]" value="A">A
    <label>Win:</label>
    <input type="text" name="items[A][win]"><br><br>
    <label>Loss:</label>
    <input type="text" name="items[A][loss]"><br><br>
    <label>Draw:</label>
    <input type="text" name="items[A][draw]"><br><br>

    <input type="checkbox" name="selected_items[]" value="B">B
    <label>Win:</label>
    <input type="text" name="items[B][win]"><br><br>
    <label>Loss:</label>
    <input type="text" name="items[B][loss]"><br><br>
    <label>Draw:</label>
    <input type="text" name="items[B][draw]"><br><br>

    <input type="checkbox" name="selected_items[]" value="C">C
    <label>Win:</label>
    <input type="text" name="items[C][win]"><br><br>
    <label>Loss:</label>
    <input type="text" name="items[C][loss]"><br><br>
    <label>Draw:</label>
    <input type="text" name="items[C][draw]"><br><br>

    <input type="submit" value="Submit">
</form>

2. 修改控制器代码

直接遍历选中的选项,从结构化数组中取出对应值插入数据库:

// 获取用户选中的选项列表
$selectedItems = $request->input('selected_items', []);
// 获取所有选项的输入数据
$itemsData = $request->input('items', []);

foreach ($selectedItems as $itemKey) {
    // 确保对应选项的输入数据存在
    if (isset($itemsData[$itemKey])) {
        $data = $itemsData[$itemKey];
        Model::create([
            'checkValue' => $itemKey,
            'winning' => $data['win'] ?? null,
            'lost' => $data['loss'] ?? null,
            'draw' => $data['draw'] ?? null,
        ]);
    }
}

内容的提问来源于stack exchange,提问作者MM_Chanchal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 01:00:56