节能项目的点击计数被点击每个项目(Saving the click counts of an ite

2019-10-23 06:14发布

目前,我尝试建立我的网页相似的计数器。
下面你可以看到点击计数器。 它的全面工作。 可悲的是(但可以肯定的),只是当前会话...是否有可能存储该值永远不会消失?

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

也许你有另一个想法? 也许没有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> 

下面是它看起来像在页面上:

Answer 1:

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

更新

注意:将它们保存到数据库之前检查值正确性是极其重要的。 因此,它是可靠的通过发送该项目目前的点击次数来检查当前点击数$_POST值。 你确实应该做的是刚刚经历发送的项目的id $_POST ,然后看看是否该项存在,如果存在,编写以下查询递增点击数只是一个值:

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

这有几个特点:

  • 它比常规的SELECT + increment_in_php +更新更快,更更快
  • 它使用较少的系统资源
  • 这是递增的,因为在处理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
} 

注:我假设你点击的项目包含一个名为“数据ID”的属性,其持有该项目的ID被保存到数据库。



Answer 2:

如果使用DB与应用程序 ,管理与计数喜欢你的数据库列的每个画面称为lovit_count。 然后增加或通过为每个点击事件减少该字段的值。

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



文章来源: Saving the click counts of an item each item it is clicked