我建立了一个评级系统,用户可以在博客上竖起大拇指。没有登录系统(必须保持这样)。因此,为了阻止用户多次投票,我希望使用cookie(而非会话,因为它们在浏览器关闭时被销毁)。但是我已经阅读了PHP手册,并且声明必须在HTML标记之前创建所有cookie。这对我来说没有意义,因为我是如何创建cookie并为其分配仅在页面中更深入获取的数据(在html标签之后),看看我的代码:
print "<img src=\"/images/up.png\" onclick=\"increase_rating()\">";
print "<img src=\"/images/down.png\" onclick=\"decrease_rating()\">";
现在我想创建一些东西,一旦用户点击图像,它就会创建一个有选择的cookie(即,评级为up或down)以及他们投票的博客的id(因此可以投票多个博客) )..因此,如果用户重新加载页面,他们将无法投票,因为将设置cookie。
我的意思(这显然不会起作用,它几乎是我的想法(伪代码): 它基本上说,如果它已被点击(已设置cookie),那么不要让它们增加评级或降低其评级,不要运行它的功能。
if ($_COOKIE['up_clicked']){
print "<img src=\"/images/up.png\" >";
print "<img src=\"/images/down.png\">";
}elseif ($_COOKIE['down_clicked']){
print "<img src=\"/images/up.png\" >";
print "<img src=\"/images/down.png\">";
}else{
// if nothing is clicked
print "<img src=\"/images/up.png\" onclick=\"increase_rating()\">";
print "<img src=\"/images/down.png\" onclick=\"decrease_rating()\">";
}
有人可以帮帮我吗?感谢
答案 0 :(得分:0)
您将需要使用JavaScript来管理Cookie。 PHP是一个超文本预处理器,这意味着代码在HTML视图完全呈现之前执行。
要执行此操作,您需要将单击事件绑定到上下投票按钮。最简单的方法是使用jQuery和jQuery Cookies插件,可以在这里找到:
jQuery:http://jquery.com/
jQuery Cookie插件:https://github.com/carhartl/jquery-cookie
一个简短的例子:
$("#upvote").click(function(e){
//prevent default click behavior
e.preventDefault();
//Check if cookie exists
var cookie = $.cookie('the_cookie');
if(cookie){
//don't do anything already upvoted
return false;
}else {
//get ID i usually put it in a rel="<?=$id?>" field on a link via php
var id = $(this).attr("rel");
var url = "http://example.com/php-script-to-increase-vote-by-one";
//up vote article
$.post(url, id);
//create cookie valid for a year for entire site
$.cookie('the_cookie', 'the_value', { expires: 365, path: '/' });
}
});
显然应该注意的是,如果用户没有登录系统,用户可以清除他们的cookie,并根据需要自行投票。