首页 > 解决方案 > 表单数据正在发送,但它在控制器 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');
}

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

任何帮助都会受到重视。

标签: phplaravel

解决方案


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

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

一种更好的方法是如下所示,它将提交正确的表单(包含<a>标签的表单)。您还缺少告诉 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>

推荐阅读