为了账号安全,请及时绑定邮箱和手机立即绑定

使用随机令牌检查 Laravel 多次点击重复数据

使用随机令牌检查 Laravel 多次点击重复数据

PHP
ABOUTYOU 2021-11-26 15:32:25
我有一个表单,我在其中向 db 添加了一些数据,但是如果用户多次单击按钮,我想避免重复记录,我可以使用 JS 禁用该按钮,但我也想在服务器端进行一些检查。目前在表单上,我正在设置一个带有随机数的会话变量,并使用文本框(隐藏)将其发送到控制器,然后在控制器中检查会话变量是否等于文本框,然后添加到 db - 但数据仍然在 db 中多次添加,如果有人可以提供帮助,我们将不胜感激。谢谢。控制器:if ($request->token == session('test')){    session()->forget('test');    sleep(20); (this i added in order to test)    TableName::create([        'code' => 'test',        'name' => 'testing',    ]);    return "done";} else {    return "stopped";}刀刃:{{session(['test'=> rand()])}}<input type="text" value="{{session('test')}}" name="token">
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

我有一个表单,我在其中向 db 添加了一些数据,但是如果用户多次单击按钮,我想避免重复记录,我可以使用 JS 禁用该按钮,但我也想在服务器端进行一些检查。


目前在表单上,我正在设置一个带有随机数的会话变量,并使用文本框(隐藏)将其发送到控制器,然后在控制器中检查会话变量是否等于文本框,然后添加到 db - 但数据仍然在 db 中多次添加,如果有人可以提供帮助,我们将不胜感激。谢谢。


控制器:


if ($request->token == session('test')){

    session()->forget('test');

    sleep(20); (this i added in order to test)

    TableName::create([

        'code' => 'test',

        'name' => 'testing',

    ]);

    return "done";

} else {

    return "stopped";

}

刀刃:


{{session(['test'=> rand()])}}

<input type="text" value="{{session('test')}}" name="token">


查看完整回答
反对 回复 2021-11-26
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

Laravel 中有两种方法firstOrCreate或firstOrNew。


参考https://laravel.com/docs/5.8/eloquent


firstOrNew 方法,如 firstOrCreate 将尝试在数据库中定位匹配给定属性的记录。但是,如果没有找到模型,则会返回一个新的模型实例


// Retrieve flight by name, or create it with the name, delayed, and arrival_time attributes...

$flight = App\Flight::firstOrCreate(

    ['name' => 'Flight 10'],

    ['delayed' => 1, 'arrival_time' => '11:30']

);


查看完整回答
反对 回复 2021-11-26
  • 2 回答
  • 0 关注
  • 214 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信