2017-07-17 44 views
-3

我想限制表單提交到15分鐘,所以用戶必須在15分鐘內完成表單提交。表格分爲兩頁:細節和付款,所以我猜想限制必須在會話中設置。但我不知道從哪裏開始。我試着搜索一切,但所有結果都說如何限制表單提交,所以用戶每天只能提交5次。任何人都可以給我一個例子或鏈接如何實現這一目標?如何限制按時間段提交表單?

我正在使用laravel作爲框架。

+0

'「我想限制必須設置在會話中。」 - 似乎是一個合理的方法。當表單首次發送給用戶時,將當前時間戳記錄到會話值中。當用戶提交表單時,比較當前時間戳和會話存儲時間戳。 – David

+0

@David可以以某種方式顯示計時器嗎? – raqulka

+0

當然。這部分將在JavaScript中完成,並且有很多可用的JavaScript定時器和倒計數的例子。 – David

回答

0

您必須定義如何阻止提交IP? SessionID的? LoggedUser?

之後,你應該保存的唯一信息是最後一次後,每次驗證信息發生時後

0

您可以通過使用AJAX使得submition使定時submition,當你打開網頁,你可以在初始與當前時間變量,當你點擊提交你可以比較該變量與當前時間,如果它少於15分鐘,你可以讓阿賈克斯提交或不你可以做另一件事

+1

AJAX在這裏幾乎不需要。如果問題沒有要求,引入它實際上增加了不必要的複雜性,並且可能使請求者感到困惑。 – David

0

你可以使用JavaScript(或jQuery的庫)倒計時並禁用提交按鈕

function startTimer(duration, display) { 
    var timer = duration, minutes, seconds; 
    setInterval(function() { 
     minutes = parseInt(timer/60, 10) 
     seconds = parseInt(timer % 60, 10); 

     minutes = minutes < 10 ? "0" + minutes : minutes; 
     seconds = seconds < 10 ? "0" + seconds : seconds; 

     display.textContent = minutes + ":" + seconds; 

     if (--timer < 0) { 
      timer = duration; 
     } 
    }, 1000); 
} 

window.onload = function() { 
    var fiveMinutes = 60 * 5, 
     display = document.querySelector('#time'); 
    startTimer(fiveMinutes, display); 
}; 

<body> 
    <div>Registration closes in <span id="time">05:00</span> minutes!</div> 
</body> 

禁用提交按鈕改變startTimer功能是這樣的:

if (--timer < 0) { 
    timer = duration; 
}else{ 
    // get button id and disable it or redirect page 
} 

通過定時器第二個頁面,您可以隱藏輸入添加到您的形式,每一次更新了它的功能:

if (--timer < 0) { 
    timer = duration; 
    // here get hidden input id and update value 
}else{ 
    // get button id and disable it or redirect page 
} 

倒計時功能從這裏:The simplest possible JavaScript countdown timer?