【问题标题】:Restrict the user to submit a form once in a day using Jquery or J.S or php [closed]限制用户每天使用 Jquery 或 J.S 或 php 提交表单一次 [关闭]
【发布时间】:2017-09-03 06:36:41
【问题描述】:

我有一个表单,我希望一个用户每天提交一次。如果用户在一天内提交了多次,则消息将显示对不起你已经完成了!

【问题讨论】:

  • 只能对服务器实施安全限制。
  • 但我希望它在 客户端 @SLaks
  • 不是大师,但我想你能在客户端做的最好的事情就是存储一些 cookie ......但这不可信
  • 欢迎来到 Stack Overflow!我们是一个志愿者社区,为陷入特定任务的程序员提供帮助。我们不是为您编写免费代码的服务。请阅读What topics can I ask about here?How do I ask a good question?
  • @AliHassan:那你就没有安全感了。

标签: javascript php jquery forms


【解决方案1】:

您可以这样做,但是当用户更改页面时,数据将消失。这是 javascript/jquery 不应该处理的事情:

进行隐藏输入, 当提交被按下时,有一个提交功能:

<form id=theForm>
<input type=hidden name=last id=last></input>
<input type=button onclick="submitFunction()"></input>
</form>

然后有一个脚本

<script> 
submitFunction = function() {
  var ONE_DAY = 60 * 60 * 1000 * 24; /* ms */
  var lastTime = document.getElementById('last').value;
  document.getElementById('last').value = new Date();
  if (lastTime == "" || !lastTime)
  {
    document.getElementById('last').value = new Date();
    document.getElementById('theForm').submit();
  }
  else if (((new Date()) - lastTime ) < ONE_DAY)
  {
    alert('you must wait one day');
  }
  else {
    document.getElementById('theForm').submit();
  }

}
</script>

为了正确解决这个问题,我建议在用户上次提交表单时使用带有数据库记录的 PHP。这样,数据将被永久保存。

要使用 PHP 执行此操作: 首先创建一个数据库; 对于此示例,我将其称为测试数据库,表将称为 lastcheck。 在表单表中有一列:last_time 设置为时间戳; 那么就

<?php 
    $last = "";
    $servername = "xxx";
    $username = "xxx";
    $password = "xxx";
    $dbname = "test";

    try {
        $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $stmt = $conn->prepare("Select last_time from test.lastcheck order by last_time asc limit 1"); 
        $stmt->execute();

        // set the resulting array to associative
        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC); 
        foreach($stmt->fetchAll() as $k=>$v) { 
            $last = $v;
        }
    }
    catch(PDOException $e) {
        $conn = null;
    }
    $conn = null;


   echo '<form id=theForm>
         <input type=hidden value="'.$last.'" name=last id=last></input>
         <input type=button onclick="submitFunction()"></input>
         </form>';
?>
<script> 
submitFunction = function() {
  var ONE_DAY = 60 * 60 * 1000 * 24; /* ms */
  var lastTime = document.getElementById('last').value;
  document.getElementById('last').value = new Date();
  if (lastTime == "" || !lastTime)
  {
    document.getElementById('last').value = new Date();
    document.getElementById('theForm').submit();
  }
  else if (((new Date()) - lastTime ) < ONE_DAY)
  {
    alert('you must wait one day');
  }
  else {
    document.getElementById('theForm').submit();
  }

}
</script>

基本上,现在剩下的就是您的表单的方法。应该有一个操作会导致一个新的 php 页面,该页面将新日期保存到数据库,并在提交表单时执行您想要完成的任何代码,或者您可以在将新日期保存到数据库后重定向到上一页,等等

【讨论】:

  • 如果你可以用 php 来做这个,给我看看 php 中的 code
  • 完成。这写得很快,但我相信你能理解我试图使用的逻辑。基本上剩下的就是你的表单的方法。
    应该有一个操作会导致一个 php 页面将新日期保存到数据库中,并在提交表单时执行您想要完成的任何代码,或者您可以在保存新页面后重定向到上一页日期到数据库。如果这对您有帮助,请接受我的回答。
【解决方案2】:

您无法检查用户是否使用 ONLY JS 或 jQuery 提交表单,因为它们是基于客户端的语言...
您需要从服务器端执行此操作。
例如,您可以使用 PHP 和/或数据库或 cookie 来存储某人何时提交,然后检查他是否在一天之间提交。

【讨论】:

  • 好的,如果你有 php 的解决方案,那么 帮助我
猜你喜欢
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
相关资源
最近更新 更多