Ensure that each user’s click only is sent once in a defined time period Code Answer

Hello Developer, Hope you guys are doing great. Today at Tutorial Guruji Official website, we are sharing the answer of Ensure that each user’s click only is sent once in a defined time period without wasting too much if your time.

The question is published on by Tutorial Guruji team.

Hi I have the following code which I am trying to adapt to make sure that when Like is clicked by a user who is logged in, then only one request is sent in a predetermined period of time that can be adjusted i.e Like can be clicked and a request sent only once every 5 minutes. There must be a javascript function I can use but I can’t figure it out.

index.php:

<?php
  include 'init.php';
  include 'connect.php';
?>
<!doctype html>
  <html>
    <body>
      <?php       
        $userid = $_SESSION['user_id'];
        echo '<a class="like" href="#" onclick="like_add(', $userid,');">Like</a>';
      ?>
      <script type ="text/javascript" src="jquery-1.11.1.min.js"></script>
      <script type ="text/javascript" src="like.js"></script>      
  </body>
</html>

connect.php:

<?php  
  $servername = "localhost";
  $username = "root";
  $password = "";
  $dbname = "DB";
  $conn = new mysqli($servername, $username, $password, $dbname);

  if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
  }
?>

init.php:

<?php
  session_start();
  $_SESSION['user_id']='1';
  $userid = $_SESSION['user_id'];
  include 'connect.php';
  include 'like.php';
?>

like.js:

function like_add(userid) {
  $.post('like_add.php', {userid:userid}, function(data) {
    if (data == 'success'){
      add_like($userid);
    } else {
      alert(data);
    }
  });
}

like.php:

<?php
  function add_like($userid) {
    include 'connect.php';

    $stmt = $conn->prepare("INSERT INTO clicks (user) VALUES (?)");
    $stmt->bind_param("s", $userid);

    $stmt->execute();
    $stmt = $conn->prepare("SELECT max(id) FROM clicks WHERE user=?");
    $stmt->bind_param("s", $userid);
    $stmt->execute();
    $stmt->bind_result($click);
    $stmt->fetch();
    echo $click;
    $stmt->close();
  }
?

like_add.php

<?php
  include 'init.php';
  if (isset($userid)) {
    $userid = $userid;
    add_like($userid);
  }
?>

Answer

If you pass the a tag into like_add like so:

<?php       
    $userid = $_SESSION['user_id'];
    echo '<a class="like" href="#" onclick="like_add(this, '.$userid.');">Like</a>';
?>

You can disable it in the javascript function for a set time period:

function like_add(a, userid) {
    a.disabled = true;
    setTimeout(function(){
         a.disabled = false;
    ), 5000});//Code will execute in 5 seconds to enable the a tag

    $.post('like_add.php', {userid:userid}, function(data) {
        if (data == 'success'){
            add_like($userid);
        }else{
            alert(data);
        }
    });
}

Is this something alogn the lines of what you were looking for?

We are here to answer your question about Ensure that each user’s click only is sent once in a defined time period - If you find the proper solution, please don't forgot to share this with your team members.

Related Posts

Tutorial Guruji