限制用户使用Jquery或J.S或php在一天内提交一次表单

时间:2017-04-07 19:14:01

标签: javascript php jquery forms

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

2 个答案:

答案 0 :(得分:0)

您无法检查用户是否使用 JS或jQuery提交了表单,因为它们是基于客户端的语言...
你需要从服务器端做到这一点 例如,您可以使用PHP和/或数据库,或者在有人提交时存储cookie,然后检查他是否在一天之间提交。

答案 1 :(得分:0)

您可以这样做,但是当用户更改页面时,数据将会消失。这是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页面,它保存一个新的日期到数据库,并做提交表单时你想做的任何代码,或者你可以在保存新的日期到数据库后重定向到上一页,等