php - 表单数据正在发送,但它在控制器 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');
}
请帮我弄清楚我错过了什么。
任何帮助都会受到重视。
解决方案
它不起作用的原因是您的代码将始终针对第一个实例,因为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>
推荐阅读
- powerbi - 如何在散点图中显示点的轨迹,而不是让它在功率双散点图中消失?
- java - 对HashMap java的绝对值求和
- compilation - 编译器真的可以识别时间复杂度的改进并在幕后实现它们吗?
- django - 如何在 django 模板中显示模型数据?
- c# - EntityState.Deleted 和 Remove() 方法之间的真正区别是什么?何时使用它们中的每一个?
- javascript - 将 API 请求中的 PDF 流字节转换为 base64(Javascript *无库!*)
- hololens - HoloLens 2 滞后的 TCP 客户端
- excel - VBA unprotect-blank 进入和退出处理
- visual-studio - 用于运行 Visual Studio 2019 的推荐 VM
- c# - 任务是否可能由于您的 AppDomain 之外的事件而出错?