2017-07-17 23 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?