2017-10-06 61 views
0

我運行下面的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標準計算機。不一致的重複插入僅發生在生產服務器上。以下是服務器上的一些測試的屏幕截圖。

PHPMyAdmin Showing Tests

我有刀片遍佈在我的計劃,而其中任何一個都可以複製,這是不一致的。它不應該那樣。在我的XAMPP配置中是否應該改變一些東西? PHP配置?有沒有可以實施的解決方法,可以防止在服務器上發生這種情況?

回答

0

試試這個:

<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> 
+0

return語句吧?我不認爲問題出現在JavaScript中,但經過一系列測試後,它似乎可以正常工作。謝謝! – n8jadams

+0

@ n8jadams問題不僅在於回報。 preventDefault()非常重要。如果你想使用JavaScript提交,你需要從一開始就阻止它。所以html不會在第一次呈現腳本時提交它。 – ssuhat

+0

我注意到這個變化。再次感謝。 :) – n8jadams