2011-02-11 72 views
1

我想在我的网站上实现一个投资分析风格的投票按钮。我有它运作良好,唯一的问题是用户目前可以投票无限次。我需要它来运行一个SQL查询并检查数据库,看看他们在接受投票前是否投了票。Reddit式的投票按钮

问题是:我在哪里可以将SQL查询放入此AJAX POST中,如果存在投票则禁用该按钮?这是我到目前为止:

$(function(){ 
    $("a.vote_up").click(function(){ 
    //get the id 



    the_id = $(this).attr('id'); 

    // show the spinner 
    $(this).parent().append("<div id='spinnerDiv' style='width:20px; height:20px; float:right; margin-right:570px;'><img src='images/spinner.gif'/></div>"); 

    //fadeout the vote-count 
    $("span#votes_count, span#vote_buttons"+the_id).fadeOut("fast"); 


    //the main ajax request 
     $.ajax({ 
      type: "POST", 
      data: "action=vote_up&id="+$(this).attr("id"), 
      url: "votes.php?personid=<?php echo $personid;?>&userid=<?php echo $userid;?>", 
      success: function(msg) 
      { 

       $("span#votes_count"+the_id).html(msg); 
       //fadein the vote count 
       $("span#votes_count"+the_id).fadeIn(); 
       //remove the spinner 
       $("#spinnerDiv").remove(); 
       $("span#vote_buttons"+the_id).fadeIn(); 

      } 
     }); 

    }); 

回答

2

你不想把SQL查询放在那里,那不是AJAX。你应该调用一个包含代码的url处理程序来执行查询并返回json的结果。所以你的PHP应用程序在votes.php应该做这个检查,并且如果这个人已经投票了,就会返回一个错误。然后你可以设置一个div,这个用户已经投票了。

因此,例如,您的应用程序可以返回JSON: {成功:假消息: “用户已经投票”}

见: http://api.jquery.com/jQuery.post/如何检索JSON

编辑

这里是我正在谈论的工作流程:

在index.php中你有jquery,就像你现在一样,它发布到votes.php用户标识和他们投票的内容。

在votes.php中,您可以获得这些参数。 php中的逻辑是这样的:

$query = sprintf("SELECT * from votes uid='%s' AND vote_id='%s'", 
mysql_real_escape_string($uid), 
mysql_real_escape_string($vote_id)); 

if(mysql_query($query)){ 
    return json_encode(array("status" => 'failure', "message" => "user already voted"); 
} 
else{ 
    do_vote($uid,$vote_id); 
    return json_encode(array("status" => "success")); 
} 

然后在你的ajax函数中,你可以解码这个。如果你获得成功,灰色按钮。如果您的投票出现错误,请不要对投票进行计数,并灰掉按钮。如果您没有回应,请留下按钮并告诉用户有错误。

+0

感谢您的回复。我仍然对如何将JSON返回给index.php感到困惑。如果PHP在vote.php POST一个布尔值(不投票或不),然后在index.php上使用JSON来获取该布尔值的结果? – user547794 2011-02-12 18:56:52

+0

你的index.php应该发布用户ID和他们投票的内容。然后在vote.php中的代码应该看看他们是否投了票。如果他们已经投票了,像我说的那样返回一个JSON散列。在AJAX中,JavaScript发起对某个URL的请求(如votes.php)并异步获取响应。我会为你更新我的答案 – 2011-02-12 20:55:08

0

表决投票并且'votes.php'返回'成功'或其他任何,你可以淡出按钮并分离点击事件。

在提交每个新投票之前,请不要进行查询,而是在建立页面时ping数据库 - 将您投票的对象的ID和用户ID与数据库中的投票进行匹配,如果它回来用户已经对这个项目进行了投票,突出显示他们的投票(upvote arrow或downvote arrow) - 并从他们已经点击的箭头中删除点击事件。