2017-03-24 2 views
-3

Ich habe zwei Schaltflächen auf meiner Webseite (Accept And Reject). Ich möchte die Anzahl der Klicks auf die Schaltfläche "Akzeptieren" einschränken. Ich möchte, wie oft die Schaltfläche "Akzeptieren" innerhalb von 24 Stunden 20 mal angeklickt werden kann. Nach 24 Stunden kann der Benutzer den Knopf 20 Mal erneut drücken. Ich benutze eine MySQL-Datenbank und PHP.Begrenzung der Anzahl der Klicks auf eine Schaltfläche

+4

Was hast du bisher gemacht? Irgendein Code? Bitte sehen Sie: https://stackoverflow.com/help/asking –

+0

Verwenden Sie einen Counter-Mechanismus und settimeout, um dies zu erreichen. –

+0

whats that Accept-Taste ist alles über. –

Antwort

6

Grundsätzlich habe ich keine Ahnung von PHP, aber ich kann Ihnen vorschlagen, wie Sie Ihr Ergebnis erreichen könnten.

Sie benötigen eine Tabelle mit bestimmten Spalten wie unten angegeben.

  1. UserId int PK
  2. FirstClickDateTime Datetime
  3. TOTAL int

ein Geschäft Prozedur erstellen, die die Operationen einschließlich Einfügen, Aktualisieren nach Zustand durchführen, wie folgend.

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 

Nun ist diese Zeit hinter

Wenn Benutzerlast auf dieser Seite (die Schaltfläche Übernehmen zu diesem Zeitpunkt Sie, dass die Benutzer bestimmen müssen hat Klicks von Code zu verwalten hat die Gesamtzahl der Klicks innerhalb von 24 Stunde abgeschlossen Für diese Aufgabe müssen Sie eine Funktion erstellen, die wahr oder falsch zurückgibt).

Wenn Taste ist für bestimmte Benutzer ermöglichen, als unter Operation durchführen ...

Wenn Benutzer klicken Sie auf „Übernehmen“ klicken, müssen Sie den Vorgang aus dem Code aufrufen zusammen mit den erforderlichen Parametern.

Sonst Schaltfläche ist für diesen Benutzer deaktiviert.

0
  • Fügen Sie eine onclick EventListener zur button hinzu.
  • Legen Sie eine globale Variable als Zähler fest.
  • Erhöhen Sie für jeden Klick die Anzahl.
  • Während es 20 erreicht, fügen Sie einen setTimeout hinzu, um den Zähler auf 0 mit der Zeitspanne 86400000 (24 Stunden in Millisekunden) zurückzusetzen.

Überprüfen Sie den folgenden Code. (Klicken Sie auf das 20-fache)

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

0

Sie können nicht wie @SagarV tun will, denn dann kann ein Benutzer einfach die Seite neu zu laden und Weiter Spamming die Taste. Sie müssen ein Flag oder etwas in der sessionStorage oder einem Cookie setzen, um zu verhindern, dass der Benutzer innerhalb von 24 Stunden auf die Schaltfläche klickt.

+0

Können Sie mir eine Art Code zur Verfügung stellen? Es wäre wirklich hilfreich. –

+0

Ich bin nicht sicher, wie Ihre Anwendung funktioniert, aber verwenden Sie den Zähler wie oben vorgeschlagen, und wenn das Limit erreicht ist, dann setzen Sie ein Cookie für diesen Benutzer wie document.cookie = "username = Bill Bull; expires = Sa, 25 March 2017 12 : 00: 00 UTC; Pfad =/"; – FrankCamara

+0

oder verwenden Sie die SessionStorage für das Fensterobjekt, Problem mit diesem ist, dass wenn ein Benutzer eine neue Registerkarte öffnet, dann ist es eine neue Sitzung. – FrankCamara

Verwandte Themen