使用存储过程,post后的Laravel返回为null



我有一个存储方法,返回如下:

return redirect()->route('hasil.transaksi', ["data" => $data]);

路线如下:

ROUTE::GET('hasil-transaksi', [KasirRajalController::class, 'hasilTransaksi'])->name('hasil.transaksi');

方法返回如下:

public function hasilTransaksi(Request $request)
{
$data["info"] = DB::select("EXEC spx_kasirirj_GetData
@sdata = 2,
@where = '" . $request->no_transaksi . "'
");
dd($data);
}

存储后的URL如下:

http://127.0.0.1:8000/hasil-transaksi?data%5B0%5D%5B%5D=0000260&data%5B0%5D%5Bno_transaksi%5D=KRJ22010001

我想捕获no_transaksi=KRJ22010001以粘贴在上面返回的方法中。但是我不明白,结果是空的。

在此处输入图像描述

求你了,救命?

完整dd($request(:在此处输入图像描述

在您的代码中有很多东西需要检查:

  • return redirect()->route('hasil.transaksi', ["data" => $data]);

这将执行GET重定向,因此$data对象将作为GET参数添加并编码(从对象到字符串(。这就是为什么您的URL唯一参数是";数据";(http://127.0.0.1:8000/hasil-transaksi?data=(,然后是编码数据。

您解码的URL数据看起来像这个data[0][]=0000260&data[0][no_transaksi]=KRJ22010001

这种格式看起来有点奇怪,但我没有足够的代码来确认。你可以这样做(假设你不需要0000260参数[应该键入](:

return redirect()->route('hasil.transaksi', ["no_transaksi" => $data[0]['no_transaksi']]);

这应该会生成一个正确的URL?no_transaksi=xx,因此$request->no_transaksi应该可以工作(您也应该清理(。

  • @where = '" . $request->no_transaksi . "'

正如@Joundill所提到的,原始查询的这一部分是向SQL注入开放的。如果不使用Eloquent、Models或Requests,则至少应该对no_transaksi请求参数值进行清理和验证。

最新更新