提问人:Hashaam Ahmed 提问时间:8/16/2019 最后编辑:AndronicusHashaam Ahmed 更新时间:12/29/2019 访问量:958
使用随机令牌检查 Laravel 在多次点击时重复数据
Duplicate data on multiple clicks using random token check Laravel
问:
我有一个表单,我正在向数据库添加一些数据,但是如果用户多次单击按钮,我想避免重复记录,我可以使用JS禁用该按钮,但我也想在服务器端进行一些检查。
目前在表单上,我正在设置一个带有随机数的会话变量,并使用文本框(隐藏)将其发送到控制器,然后在控制器中我检查会话变量是否等于文本框,然后添加到数据库 - 但数据仍然在数据库中添加多次,如果有人可以提供帮助,将不胜感激。谢谢。
控制器:
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">
答:
0赞
Mahesh
8/16/2019
#1
您可以检查MYSQL中不存在,检查下面
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Rupert', 'Somewhere', '022') AS tmp
WHERE NOT EXISTS (
SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;
1赞
Rp9
8/16/2019
#2
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']
);
评论
unique