查询我的评级系统

时间:2014-04-23 12:11:49

标签: php cookies system rating

我建立了一个评级系统,用户可以在博客上竖起大拇指。没有登录系统(必须保持这样)。因此,为了阻止用户多次投票,我希望使用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()\">";
        }

有人可以帮帮我吗?感谢

1 个答案:

答案 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,并根据需要自行投票。