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

我正在尝试更新票证(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');

}

请帮我弄清楚我错过了什么。


任何帮助都会很有价值。


哔哔one
浏览 126回答 1
1回答

尚方宝剑之说

它不起作用的原因是您的代码将始终针对第一个实例,因为id每个表单的 完全相同。您不应该id多次为任何元素设置相同的值。更好的方法是像下面这样,它将提交正确的表单(包含<a>标签的表单)。您还缺少 method 字段来告诉 laravel 这是一个删除请求。<form action="Ticket/{{$Ticket->ID}}" method="POST">&nbsp; &nbsp; <input type="hidden" name="ID" value="{{$Ticket->ID}}">&nbsp; &nbsp; {{ csrf_field() }}&nbsp; &nbsp; {{ method_field('DELETE') }}&nbsp; &nbsp; <a href="" onclick="event.preventDefault(); this.parentNode.submit();">&nbsp; &nbsp; &nbsp; &nbsp; DELETE&nbsp; &nbsp; </a></form>
打开App,查看更多内容
随时随地看视频慕课网APP