限制按钮的点击次数

时间:2017-03-24 07:24:08

标签: javascript php jquery html mysql

我的网页上有两个按钮(接受并拒绝)。我想限制接受按钮的点击次数。我希望在24小时内点击“接受”按钮的次数为20次。 24小时结束后,用户可再次单击该按钮20次。我正在使用MySQL数据库和PHP。

3 个答案:

答案 0 :(得分:6)

基本上我对PHP一无所知,但我可以建议实现结果的方式。

您需要一张包含以下特定列的表格。

  1. UserId int PK
  2. FirstClickDateTime DateTime
  3. TotalClicks int
  4. 根据条件创建执行包括插入,更新等操作的存储过程。

        CREATE PROCEDURE sp_ManageButtonClickByUserId
          @UserId INT,
          @IsClick BIT = 0
        AS BEGIN
    
    -- Lets consider your table name is ManageButtonCLick with columns including 
    -- 1.UserId int
    -- 2.FirstClickDateTime DateTime
    -- 3.TotalClicks int
    
    IF ISNULL(@IsClick,0) <> 0 -- Determine IsClick is true when pass from code
    BEGIN
        Declare @TotalClick AS INT
        SET @TotalClick = (SELECT TotalClick FROM ManageButtonCLick WHERE UserID = @UserId);
        SET @TotalClick = ISNULL(@TotalClick, 0) + 1;
    
    
        If EXISTS(SELECT 1 FROM ManageButtonCLick WHERE UserID = @UserId) -- If user exists than update record
        BEGIN
    
            /* Determine the 24 is completed or not for specific user */
            Declare @IsHoursCompleted AS BIT = 0; -- Indecates false
            Declare @TotalHoursCompleted AS INT = 0;
    
            SET @TotalHoursCompleted = (SELECT DATEDIFF(HOUR, FirstClickDateTime, GETDATE()) FROM ManageButtonCLick WHERE UserID = @UserId);
            SET @IsHoursCompleted = (SELECT CASE WHEN ISNULL(@TotalHoursCompleted,0) >= 24 THEN 1 ELSE 0 END);
    
            IF (ISNULL(@IsHoursCompleted,0) <> 0)
            BEGIN
                UPDATE ManageButtonCLick
                SET FirstClickDateTime = GETDATE(), TotalClicks = 1
                WHERE UserID = @UserId
            END
            ELSE
            BEGIN
                UPDATE ManageButtonCLick
                SET TotalClicks = @TotalClick
                WHERE UserID = @UserId
            END
        END
        ELSE -- if user not exists than insert that user detail for button click
        BEGIN
            INSERT INTO ManageButtonCLick (UserId, FirstClickDateTime, TotalClicks)
            VALUES (@UserId, GETDATE(), @TotalClick)
        END
    END
    END 
    

    现在这一次来管理来自背后代码的点击次数

    当用户加载此页面时(此时有“接受”按钮,您需要确定该用户在24小时内完成了总点击次数。对于此任务,您必须创建一个返回true或false的函数。)

    如果为特定用户启用按钮,则执行以下操作...

    当用户点击&#34;接受&#34;按钮,您需要从代码中调用该过程以及所需的参数。

    此用户已禁用

    其他按钮。

答案 1 :(得分:0)

  • onclick EventListener添加到button
  • 将全局变量设置为计数器。
  • 每次点击,增加点数。
  • 当它达到20时,添加一个setTimeout将计数器重置为0,时间跨度为86400000(24小时,以毫秒为单位)。

检查以下代码。 (点击20次)

&#13;
&#13;
var times=0;
function checkTime(btn){
  if(times<20){
     ++times;
  }
  else{
    btn.disabled=true;
    console.log("come back tomorrow");
    setTimeout(function(){ times=0; }, 86400000);
  }
}
&#13;
<button onclick="checkTime(this);">Accept</button>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你不能像@SagarV那样做,因为用户可以重新加载页面并继续垃圾邮件按钮。你需要在sessionStorage或cookie中设置一个标志或某个东西,以防止用户在24小时内点击按钮。