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

Laravel获取选中条目对应id的input值传入控制器为空问题求解

问题原因分析

  • 你当前用<a>标签跳转的方式属于GET请求,只会携带你在route参数里定义的id,不会自动把同行quantity输入框的值传递到后端
  • 所有行的input都使用同一个name="quantity",没有和行ID绑定,就算提交也无法区分是哪一行的输入值
  • 控制器中$request->route('quantity')是用来读取路由占位参数的,你没有在路由中定义quantity占位符,自然拿不到值

修复方案

第一步:修改Blade模板,改用表单提交

给每行单独设置表单,同时把重复显示的session提示移到循环外:

@foreach($reagentcard as $r)
<tr>
    <td>{{ $i++ }}</td>
    <td>{{ $r->casnumber }}</td>
    <td>{{ $r->name }}</td>
    <td>{{ $r->description }}</td>
    <td>{{ $r->classification }}</td>
    <td>{{ $r->manname }}</td>
    <td>{{ $r->incomedate}} </td>
    <td>{{ $r->expirationdate}} </td>
    <td>{{ $r->quantity }} </td>
    <td>
        <form action="{{ route('collect',['id' => $r->id]) }}" method="POST">
            @csrf
            <input class="form-control" type="number" name="quantity">
    </td>
    <td>
            <button type="submit"> Collect </button>
        </form>
    </td>
</tr>
@endforeach
@if($message = Session::get('info'))
<strong style="color:red">{{ $message }}</strong><br>
@endif
@if($message = Session::get('error'))
<strong style="color:red">{{ $message }}</strong><br>
@endif

第二步:修改控制器取值逻辑

用input()方法读取表单提交的参数即可:

public function collectReagent($id, Request $request)
{
    $user_id = Auth::user()->id;
    $takedate = Carbon::now();
    $reagentcard = ReagentCard::where('id',$id)->first();
    $test = $request->input('quantity');
    return view('test',compact('test', 'id'));
}

可选方案:保留GET跳转逻辑

如果不想用表单POST提交,也可以通过JS监听每行quantity输入框的变化,动态修改对应Collect按钮的href,把quantity作为GET参数拼接到链接后,控制器用$request->get('quantity')读取即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:09:00