Laravel 5.4不一致的重复插入
问题描述:
我运行下面的Laravel代码时得到不一致的重复插入的:(我知道我打破所有的最佳做法,但这个例子的代码分离的问题。)Laravel 5.4不一致的重复插入
应用程序/路由/网络。 PHP:
<?php
use Illuminate\Support\Facades\DB; // NOTE: I am using the query builder, not a model
use Carbon\Carbon;
Route::get('formtest', function() {
return view('testing.index');
});
use Illuminate\Http\Request;
Route::post('formtest', function(Request $request) {
DB::table('pers2_testing_inserts')
->insert([
'data' => $request["test"],
'created_at' => Carbon::now(),
'updated_at' => Carbon::now()
]);
});
应用/资源/视图/测试/ index.blade.php:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>TESTING</title>
</head>
<body>
<form id="form" action="" method="post" novalidate autocomplete="off" onsubmit="disableAndSubmit(event)">
<input type="text" name="test" id="text_box">
<input type="submit" id="submit_button">
</form>
<script type="text/javascript">
var text_box = document.getElementById('text_box');
var submit_button = document.getElementById('submit_button');
var form = document.getElementById('form');
function disableAndSubmit(e) {
submit_button.disabled = true;
if(text_box.value !== '') {
form.submit();
} else {
e.preventDefault();
submit_button.disabled = null;
}
}
</script>
</body>
</html>
我的项目是建立在Laravel 5.4,PHP 7.1.7。我在Mac上开发,使用vagrant作为虚拟机。我的生产服务器是带有XAMPP v3.2.2的Windows Server 2008 R2标准计算机。不一致的重复插入仅发生在生产服务器上。以下是服务器上的一些测试的屏幕截图。
我有刀片遍布在我的计划,而其中任何一个都可以复制,这是不一致的。它不应该那样。在我的XAMPP配置中是否应该改变一些东西? PHP配置?有没有可以实施的解决方法,可以防止在服务器上发生这种情况?
答
试试这个:
<script type="text/javascript">
var text_box = document.getElementById('text_box');
var submit_button = document.getElementById('submit_button');
var form = document.getElementById('form');
function disableAndSubmit(e) {
e.preventDefault();
submit_button.disabled = true;
if(text_box.value !== '') {
form.submit();
return true;
} else {
submit_button.disabled = false;
return false;
}
}
</script>
return语句吧?我不认为问题出现在JavaScript中,但经过一系列测试后,它似乎可以正常工作。谢谢! – n8jadams
@ n8jadams问题不仅在于回报。 preventDefault()非常重要。如果你想使用JavaScript提交,你需要从一开始就阻止它。所以html不会在第一次呈现脚本时提交它。 – ssuhat
我注意到这个变化。再次感谢。 :) – n8jadams