目前,我尝试建立我的网页相似的计数器。
下面你可以看到点击计数器。 它的全面工作。 可悲的是(但可以肯定的),只是当前会话...是否有可能存储该值永远不会消失?
最后一件事! 在网站上,是多张图片喜欢。 所以,我不知道如何使用存储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>
下面是它看起来像在页面上:
你应该做的就是将它们存储在数据库中。 您应该发送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被保存到数据库。
如果使用DB与应用程序 ,管理与计数喜欢你的数据库列的每个画面称为lovit_count。 然后增加或通过为每个点击事件减少该字段的值。
当加载页面,您可以加载从数据库中的图像上点击次数。