Laravel return 在 post 之后对于存储过程为空

Laravel return after post is null with stored procedure

我有存储 方法 和 return 像这样:

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

使用 路线 像这样:

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

方法return是这样的:

    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粘贴到上面的方法return中。但是我不明白,结果是空的。

enter image description here

请帮忙?

完整的 dd($request) : enter image description here

您的代码中有多项内容需要审核:

  • 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 or Requests,您至少应该清理并验证 no_transaksi 请求参数值。