Php 使用随机令牌检查Laravel在多次单击时复制数据

Php 使用随机令牌检查Laravel在多次单击时复制数据,php,laravel,validation,server-side,Php,Laravel,Validation,Server Side,我有一个表单,其中我将向db添加一些数据,但我希望避免重复记录,如果用户多次单击按钮,我可以使用JS禁用按钮,但我也希望在服务器端进行一些检查 目前,在表格中,我设置了一个带有随机数的会话变量,并使用textbox(隐藏)将其发送给控制器,然后在控制器中,我检查会话变量是否等于textbox,然后将其添加到db中-但数据仍然以db的形式添加了多次,如果有人能提供帮助,我将不胜感激。谢谢 控制器: if ($request->token == session('test')){ se

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

目前,在表格中,我设置了一个带有随机数的会话变量,并使用textbox(隐藏)将其发送给控制器,然后在控制器中,我检查会话变量是否等于textbox,然后将其添加到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">
{{session(['test'=>rand()])}

您可以检查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;

LaravelFIRST或CREATEfirstOrNew中有两种方法

提及

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']
);

单击一次后,通过JavaScript禁用按钮。您可以创建哈希来预先检查sql中的输入,或者如果必须这样做,则将列更改为唯一以避免重复。如果您使用laravel yung,则可以在验证控制器上使用
unique
函数在该列上设置唯一键将非常有用