为了账号安全,请及时绑定邮箱和手机立即绑定

表单数据正在发送,但它在控制器 Laravel 5.8 上被操纵

表单数据正在发送,但它在控制器 Laravel 5.8 上被操纵

PHP
哔哔one 2021-11-13 10:29:30
我正在尝试更新票证(SET Deleted = TRUE因为我还必须显示已删除的票证)。为此,我POST在表单上使用带有票证 ID 的方法,但是当表单提交时,票证 ID 更改为最新的票证 ID。当我检查时,我在操作中看到了确切的票证 ID,但在提交时,它会发生变化。我也尝试向它传递一个隐藏的输入,但不幸的是它也被更改为最新的票证。刀刃<tbody>@foreach ($Tickets as $Ticket)    <tr>        <td>{{$loop->iteration}}</td>        <td>{{$Ticket->Customer->Name}}</td>        <td>$ {{$Ticket->Paid}}</td>        <td>$ {{$Ticket->TDisc}}</td>        <td>{{$Ticket->Tax}}</td>        <td>{{ date("d M Y", strtotime($Ticket->Date))}}</td>        <td class="text-right">            <a href="/Ticket/{{$Ticket->ID}}">EDIT</a>            <a href="" onclick="event.preventDefault(); document.getElementById('Delete').submit();">DELETE</a>            <form id="Delete" action="Ticket/{{$Ticket->ID}}" method="POST" style="display: one;">                <input type="hidden" name="ID" value="{{{{$Ticket->ID}}}}"                @csrf            </form>        </td>    </tr>@endforeach</tbody>控制器public function destroy(Request $request, $id) {    dd($id);    Ticket::where('ID', $id)->update(['Deleted' => TRUE]);    return redirect()->back()->with('success', 'Ticket has been Deleted');}请帮我弄清楚我错过了什么。任何帮助都会很有价值。
查看完整描述

1 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

它不起作用的原因是您的代码将始终针对第一个实例,因为id每个表单的 完全相同。


您不应该id多次为任何元素设置相同的值。


更好的方法是像下面这样,它将提交正确的表单(包含<a>标签的表单)。您还缺少 method 字段来告诉 laravel 这是一个删除请求。


<form action="Ticket/{{$Ticket->ID}}" method="POST">

    <input type="hidden" name="ID" value="{{$Ticket->ID}}">

    {{ csrf_field() }}

    {{ method_field('DELETE') }}

    <a href="" onclick="event.preventDefault(); this.parentNode.submit();">

        DELETE

    </a>

</form>


查看完整回答
反对 回复 2021-11-13
  • 1 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信