dongnong3019 2015-07-21 15:56
浏览 58
已采纳

确保每个用户的点击仅在定义的时间段内发送一次

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);
  }
?>
  • 写回答

3条回答 默认 最新

  • doupao6698 2015-07-21 16:09
    关注

    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?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件
  • ¥15 使用ESP8266连接阿里云出现问题