在网络的某个地方,我看到一个网站上有一个基本的“喜欢”的博客文章脚本。
我试图复制它,我只是有点困惑。这是我前端的代码
Javascript,需要jquery
jQuery(document).ready(function() {
function my_reloadLikes(who) {
var text = jQuery("#" + who).html();
var patt= /(\d)+/;
var num = patt.exec(text);
num[0]++;
text = text.replace(patt,num[0]);
jQuery("#" + who).html('<span class="count">' + text + '</span>');
} //reloadLikes
function my_likeInit() {
jQuery(".likeThis").click(function() {
var classes = jQuery(this).attr("class");
classes = classes.split(" ");
if(classes[1] == "active") {
return false;
}
var classes = jQuery(this).addClass("active");
var id = jQuery(this).attr("id");
id = id.split("like-");
jQuery.ajax({
type: "POST",
url: "index.php",
data: "likepost=" + id[1],
success: my_reloadLikes("like-" + id[1])
});
return false;
});
}
my_likeInit();
});
HTML
.like-count .icon {
background-position: 0 -19px;
width: 13px;
height: 11px;
float: left;
margin: 4px 5px 0 0;
}
.like-count a:hover .icon,
.like-count a.active .icon { background-position: -15px -19px; }
.like-count,
.edit-post,
.comment-count {
float: right;
margin: 0 0 0 10px;
}
<li class="like-count">
<a href="#" class="likeThis active" id="like-356">
<span class="count"><span class="icon"></span>
<span class="count">397</span></span>
</a>
</li>
到目前为止,这是我收集的内容......
my_likeInit()函数
my_reloadLikes()函数
当我运行firebug时,在Net / XHR下我得到了这个,
请求标题
POST: likepost=811
//在这种情况下,我点击了对ID 811投票
w3tc_referrer=http%3A%2F%2Ftest.testdomain.com%2F%3Ftheme%3Dtest; 795=795; 835=835; 832=832
这是设置的某种cookie,似乎可以保存我投票/喜欢的所有内容的ID。
响应标头
Set-Cookie 811=811; expires=Sat, 13-Jan-2807 11:04:20 GMT; path=/
在这里,我可以看到id最终被保存到cookie中。对我而言,它看起来像是OWN cookie,但是在它上面显示了cookie中的多个值,所以它们只是附加到结尾了吗?我在上面投票的所有ID都在同一页面上,可能是每页1个cookie,希望每个站点只有1个...
就我而言,我基本上已经解剖了代码,我完全理解了上面的所有内容,现在在后端,这将是我的头脑和我需要帮助的地方
好的,当页面加载时,我将从MySQL数据库填充类似的数量,我知道如何添加值并获取此脚本的值的后端。饼干部分是我有点困惑的地方。
我刚做了另一个测试,我现在看到脚本将每个投票保存为一个单独的cookie,所以如果我对100个项目进行投票,我有100个cookie用于该网站,那似乎不对?
有更好的方法吗? cookie确定我是否已经投票并阻止我再次投票,直到我的cookie被清除。这将在wordpress博客上,因此用户将不会登录,因此除了cookie和/或IP地址之外没有很多选项。
问题
====== 感谢您对cookie问题的任何见解,我意识到我有点絮絮叨叨。
答案 0 :(得分:1)
是的,绝对是在数据库中这样做的。正如我之前所说,cookie可以被修改,并且真正搞砸了你的逻辑。创建一个简单的数据库表:
-------------------------------
| likes |
-------------------------------
| like_id | post_id | user_id |
-------------------------------
在like_id
上创建主键(自动增量),以便轻松删除行。然后在UNIQUE
上创建一个post_id, user_id
索引,这将有助于数据并发,因为用户不可能在数据库级别多次喜欢同一个帖子。
但是,如果您愿意,可以省略like_id
。没有必要,一切都取决于您的偏好。
现在,您可以查询所需的任何信息。比如,帖子的喜欢数量:
SELECT COUNT( *) FROM likes WHERE post_id = $post_id
或者确定用户是否喜欢这篇文章:
SELECT like_id FROM likes WHERE post_id = $post_id AND user_id = $user_id
解决其余问题: