保存每个项目的点击次数

Posted

技术标签:

【中文标题】保存每个项目的点击次数【英文标题】:Saving the click counts of an item each item it is clicked 【发布时间】:2015-06-01 07:30:56 【问题描述】:

目前我尝试为我的网页建立一个点赞计数器。 您可以在下面看到点击计数器。它完全正常工作。可悲的是(但可以肯定)仅针对当前会话...是否有可能永久存储该值?

最后一件事!在网站上喜欢的图片不止一张。所以我不知道如何使用 cookie 或本地存储来存储值。

也许你有另一个想法?也许没有JS?

var currentValue = 0,
  count = $('.count');

$(document).ready(function() 
  count.each(function(i) 
    $(this).addClass('' + (i += 1));
  );
);



$('.heart').on('click', function(e) 
  var clickElement = $(this).find('.count');

  clickElement.html(parseInt(clickElement.html(), 10) + 1);
);
<p>Click on the Number to increase it by 1</p>

<a class="heart">
  <span class="icon"></span>
  <span class="count">0</span>
</a>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

这是它在页面上的样子:

【问题讨论】:

数据库是理想的,但如果您不处理一些后端代码,您可以使用locaStorage 将值保留在浏览器中,即使页面关闭并稍后检索它们。 【参考方案1】:

您应该将它们存储在数据库中。 您应该将项目的 id 和当前计数发送到服务器,通过查询数据库检查项目的当前计数和存在,如果验证,将它们保存到数据库(更新或插入,取决于您的数据库方案)。

更新

注意:在将值保存到数据库之前检查值的正确性非常重要。因此,通过在$_POST 值中发送项目的当前点击计数来检查当前点击计数是可靠的。您确实应该做的只是通过$_POST 发送项目的ID,然后查看项目是否存在,如果存在,编写以下查询以将点击计数增加一个值:

UPDATE item_table SET (click_counter = click_counter+1) WHERE item_id = ?

这有几个特点:

比普通的select+increment_in_php+update快多了 更快 它使用更少的系统资源 这是最可靠的递增方法,因为虽然 在 PHP 中处理用户值,另一个请求可能只是 更新了该值,因此您在 PHP 中的值不是最新鲜的 一。但是通过 SQL,它已经知道最近的值是什么 也不会有这种碰撞。

如果您将 click_counter 作为 item_table 的列并且您只是更新它,则上述方法和说明适用。但是我有一个建议给你(当然如果你还没有实现这个)

创建一个名为 item_counts 的表,然后创建三个列,例如 id、item_id、date_created。您可以添加许多其他列,例如 user_ip、user_id(如果经过身份验证)等。

然后,每次访问时,您只需将一条记录添加到您的表中。与以前的解决方案相比,这具有几个特点:

兼容数据库原子性规则。

您可以稍后对其进行分析。

您可以通过查询数据库获得 click_counts:

SELECT COUNT(id) FROM item_counts WHERE item_id = ?

此解决方案的缺点是,在呈现页面时,您必须有一个额外的查询来获取项目的 click_counts。 它当然会在服务器上占用更多空间,但如果您的项目不是一个小项目,那么它是值得的。但是,我个人从不试图扼杀项目规模的良好做法,如果这种做法很容易获得的话。

更新说明结束​​

你可以发送一个ajax请求:

var already_clicked = [];

$('.heart').on('click', function(e) 
  var clickElement = $(this).find('.count');
  var itemId = $(this).attr("data-id");
  // changes to current view in the page
  clickElement.html(parseInt(clickElement.html(), 10) + 1);


  // send an ajax request
  $.ajax(
     url : "server.php",
     data :  count : parseInt(clickElement.html(), 10),
            id :  ,
     type : "POST",
     success : function(data)
        // do something in the success
     
  );
);

现在您的 PHP 脚本应该如下所示

// using mysqli extension
$db = new mysqli("localhost", "usr", "pass", "db");

if( isset($_POST["count"]) && isset($_POST["id"]) )

     if (check_if_the_count_is_ok($_POST["count"], $_POST["id"])) 
     
       $new_count = $_POST["count"] + 1;
       $stmt = $db->prepare("INSERT INTO counts (count, id) VALUES(?, ?)");

       $stmt->bind_param("ii", $new_count, $_POST["id"]);
       $stmt->execute();

       echo json_encode([ "result" : true ]);
     
     else
     
      echo json_encode([ "result" : false]);
     





function check_if_the_count_is_ok($item_count, $item_id)

     // write a select query to see if the count is true
 

注意:我假设您点击的项目包含一个名为“data-id”的属性,其中包含要保存到数据库的项目的 ID。

【讨论】:

不客气。您可以接受它作为未来访问者的答案。 我肯定会 ;) 但我需要一些时间 2 测试它,因为我有 2 份工作给其他客户@first id : 【参考方案2】:

如果您在应用程序中使用数据库,请使用数据库中名为 lovit_count 的每张图片的列管理计数。然后为每个点击事件增加或减少该字段值。

当您加载页面时,您可以从数据库中加载该图像的点击次数。

【讨论】:

Op 没有谈到数据库。您还可以提供一些代码来说明您正在谈论的内容吗? @LelioFaieta 不了解数据库和数据库结构,如何提供代码?

以上是关于保存每个项目的点击次数的主要内容,如果未能解决你的问题,请参考以下文章

excel怎么统计每个名称出现次数

禁用整个RecyclerView的点击次数

如何计算未注册用户按下“搜索”的次数,然后将其保存在MySQL数据库中并为每个用户限制该数量?

怎样统计EXCEL中相同项目的总和

201671030113 词频统计软件项目报告

在 NSMutableArray 中保存每个 didSelectRowAtIndexPath 点击对象