我目前正在从事一个Web项目,我想填写一份反馈表。我希望ip只能以例如每次一次的形式发送反馈。 4小时。
如果需要,我可以使用第三方库,但我不想使用它们(jQuery除外)。
如果要查看网站,请访问this link
我曾尝试研究堆栈溢出和其他网站,但找不到结果。我找不到JS / jQuery的方法,主要是PHP
谢谢
答案 0 :(得分:0)
限制用户执行某项操作的速率最适合在服务器上完成。这就是为什么您找到的大多数示例都在PHP中的原因。这是因为用户可以轻松更改其计算机的功能,因此在服务器上执行此操作更加安全。
如果您真的想限制客户端的费率,那么以下是我的处理方法概述:
在本地存储中有一个变量(有关MDN的更多信息),用于跟踪用户上次提交反馈的时间。
然后,将事件侦听器添加到表单Submit事件。在此事件侦听器中,如果自用户上次提交表单以来少于4个小时,则阻止表单提交。您可以使用ev.preventdefault
进行此操作。另外,请记住要更新您的变量。
答案 1 :(得分:0)
如果您正在使用数据库,则可以使用以下结构。有一个数据库表(feedbackTable)和至少3列(IP,feedbackText,feedbackTime-发送反馈的时间戳)。
提交用户表单后,获取您需要的变量...
$ip=$_POST["ip"];
$feedbackText=$_POST["feedbackText"];
使用查询中的信息...
$qry = "SELECT * FROM feedbackTable WHERE IP=:ip AND feedbackTime BETWEEN DATE_SUB(NOW(), INTERVAL 4 HOURS) AND NOW()";
// or NOW()-4 hours ... depends on database and version
执行查询。如果返回0行(对于PHP中的PDO准备的语句使用rowCount()),则可以将反馈文本添加到数据库和/或使用户可见。如果返回1行,请告诉用户他要等到4个小时后才能再次提交反馈。 实际上,最好直到上次提交后的4个小时内才对用户可见该表单。您可以通过使用ajax和jQuery“轮询”来做到这一点(在提交后隐藏表单,然后使用ajax在数据库查询脚本上设置一个间隔-可能是每分钟),当脚本返回时如我们4所示,显示再次填写表格)...但这不是必需的。如果用户花一些时间填写反馈,然后您告诉他们您不花时间,那么用户可能会感到有些沮丧。 我不会使用本地存储来节省时间要求,因为用户可以通过多种方式更改该信息。