php - 使用随机令牌检查 Laravel 多次点击重复数据
问题描述
我有一个表单,我正在向 db 添加一些数据,但是如果用户多次单击按钮,我想避免重复记录,我可以使用 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">
解决方案
您可以检查 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;
推荐阅读
- mysql - 将文本值与 LEFT JOIN 合并在一列中,并将 NULL 替换为预定义的措辞
- mysql - 如果未保存原始文件的大小,是否可以获得 MySQL blob 原始文件大小?
- java - java.lang.IllegalArgumentException:消息头字段中的非法字符:授权:基本
- python - 使用 python 从 DynamoDB 查询所有行
- java - 生成随机 UUID 非阻塞
- javascript - Vue 2 向父组件添加插槽
- docker - 创建 docker 容器时无法运行脚本
- java - 在 RecyclerView 中管理视图的回收方式
- amazon-web-services - AWS CDK 从嵌套堆栈访问父堆栈中的资源
- bash - 计算bash中字符串的长度