このReddit スタイルの投票を PHP、MySQL、jQuery で機能させようとしています。
問題: [賛成票を投じる]または[反対票を投じる] をクリックしても、何も返されません。ページ上では何も起こりません。ページが機能していることは確認しましたが、残りの部分が機能していない理由がわかりません。
votes.php
基本的に、3 つのコード セットがあります
。01head
. < > に入る jQuery スクリプト、
02 . < > 内の html body
(表示: 投票ボタンと結果) / index.php
...
03.votes.php
jquery が送信するPHP ページ ( )へのアクション。
01.) < head
> 内に配置:
<script type="text/javascript" src="http://site.com/js/jquery.pack.js"></script>
<script type="text/javascript">
$(function(){
$("a.vote_up").click(function(){
//get the id
the_id = $(this).attr('id');
// show the spinner
$(this).parent().html("<img src='images/spinner.gif'/>");
//fadeout the vote-count
$("span#votes_count"+the_id).fadeOut("fast");
//the main ajax request
$.ajax({
type: "POST",
data: "action=vote_up&id="+$(this).attr("id"),
url: "votes.php",
success: function(msg)
{
$("span#votes_count"+the_id).html(msg);
//fadein the vote count
$("span#votes_count"+the_id).fadeIn();
//remove the spinner
$("span#vote_buttons"+the_id).remove();
}
});
});
$("a.vote_down").click(function(){
//get the id
the_id = $(this).attr('id');
// show the spinner
$(this).parent().html("<img src='images/spinner.gif'/>");
//the main ajax request
$.ajax({
type: "POST",
data: "action=vote_down&id="+$(this).attr("id"),
url: "votes.php",
success: function(msg)
{
$("span#votes_count"+the_id).fadeOut().html(msg).fadeIn();
$("span#vote_buttons"+the_id).remove();
}
});
});
});
</script>
02.) < > 内のループ内に配置body
:
(投票ボタンと結果が表示される場所)
<div class=\"entry\">
<span class=\"votes_count\" id=\"votes_count" .$id. "\">" .$effective_vote. " votes</span>
<span class=\"vote_buttons\" id=\"vote_buttons" .$id. "\">
<a href=\"javascript:;\" class=\"vote_up\" id=\"" .$id. "\">Vote Up!</a>
<a href=\"javascript:;\" class=\"vote_down\" id=\"" .$id. "\">Vote Down!</a>
</span>
</div>
03.)マイvotes.php
ページ (アクションが発生する場所):
// Database connection here //
function getAllVotes($id)
{
$votes = array();
$q = "SELECT * FROM cover WHERE id='$id' ";
$r = mysql_query($q) or die("Error: ". mysql_error(). " with query ". $q);
if(mysql_num_rows($r)==1) {
$row = mysql_fetch_assoc($r);
$votes[0] = $row['votes_up'];
$votes[1] = $row['votes_down'];
}
return $votes;
}
function getEffectiveVotes($id)
{
/**
Returns an integer
**/
$votes = getAllVotes($id);
$effectiveVote = $votes[0] - $votes[1];
return $effectiveVote;
}
$id = $_POST['id'];
$action = $_POST['action'];
//get the current votes
$cur_votes = getAllVotes($id);
//ok, now update the votes
if($action=='vote_up') //voting up
{
$votes_up = $cur_votes[0]+1;
$q = "UPDATE cover SET votes_up = $votes_up WHERE id = $id";
}
elseif($action=='vote_down') //voting down
{
$votes_down = $cur_votes[1]+1;
$q = "UPDATE cover SET votes_down = $votes_down WHERE id = $id";
}
$r = mysql_query($q);
if($r) //voting done
{
$effectiveVote = getEffectiveVotes($id);
echo $effectiveVote." votes";
}
elseif(!$r) //voting failed
{
echo "Failed!";
}
具体的には、オンラインで提供されている他の評価方法と比較して、これが特に気に入っているのは、投票の合計数を返すことです (賛成票から反対票の数を差し引いて、その値を返します)。
私は jQuery や ajax をあまり使用しないため、混乱することもありますが、基本的な単純な知識は持っています。(私は通常、コードに従うだけです)
+ また、 MySQL クエリを使用するのではなく、これを PDO バージョンにするにはどうすればよいですか? 誰かがこれについてさらに助けてくれれば幸いです。:o)
StackOverflow でユーザーに通知する方法がわかりませんが、このプロジェクトの開発者は次のとおりです:
ユーザー: abhisek (ユーザー: 4507330 )
御時間ありがとうございます!うまくいけば、誰かが問題の原因を診断できます。