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

Laravel点击表格insert按钮始终插入最后一行数据问题

问题成因
  • 所有行的隐藏输入框均使用name="ft"作为字段名,且全部绑定到同一个id为regForm的表单。表单提交时会收集页面内所有关联的同名字段,后端读取同名请求参数时默认返回最后一个匹配的值,因此无论点击哪一行的按钮,最终入库的永远是最后一行的数据。
  • HTML嵌套不符合规范:<tr>标签的直接子元素仅允许为<td>或<th>,你将隐藏输入框直接放在<tr>标签下,浏览器渲染时会自动把这些错位的元素归集到表单位置,进一步加剧参数收集错乱的问题。
修改方法

直接调整Blade模板结构即可,不需要改动现有控制器核心逻辑,核心改动是每行对应一个独立表单,把隐藏输入框放到单元格内部,符合HTML嵌套规则:

<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th>header 1</th>
<th>header 2</th>
<th>button</th>
</tr>
</thead>
<tbody id="myTable">
@foreach($features as $feature)
<tr>
<td>{{ $feature->detail }}</td>
<td>row</td>
<td>
    <form action="{{route('sendDate')}}" method="post">
        @csrf
        <input type="hidden" name="ft" value="{{ $feature->detail }}">
        <button type="submit">insert</button>
    </form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>

可选优化:Laravel Eloquent模型默认会自动维护created_at、updated_at时间字段,控制器里手动给$data->created_at赋值的代码可以删除,不会影响功能。

如果不想在表格里嵌套多个表单,也可以给每个insert按钮加data-ft属性存储当前行的内容,点击时通过AJAX提交对应参数,这种方式不需要写form标签,适合前端交互更复杂的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:06:07