2011-07-09 103 views
0

我正在做一個簡單的選民,要麼「喜歡」投票或「不喜歡」投票。然後,我計算喜歡和不喜歡的總數並輸出總數。我想出瞭如何使用Jquery Ajax進行投票,但是我投票後沒有更新投票數。我想用Jquery Ajax更新$numlike$numdislike變量。如何用Jquery Ajax更新PHP變量?

這裏是PHP腳本有關的輸出:

$like = mysql_query("SELECT * FROM voter WHERE likes = 1 "); 
$numlike = 0; 
while($row = mysql_fetch_assoc($like)){ 
    $numlike++; 
} 

$dislike = mysql_query("SELECT * FROM voter WHERE likes = 0 "); 
$numdislike = 0; 
while($row = mysql_fetch_assoc($dislike)){ 
    $numdislike++; 
} 

echo "$numlike like"; 
echo "<br>"; 
echo "$numdislike dislike"; 

UPDATE: jQuery的阿賈克斯上載投票

<script> 
$(document).ready(function(){ 
    $("#voter").submit(function() { 

    var like  = $('#like').attr('value'); 
    var dislike = $('#dislike').attr('value'); 

     $.ajax({ 
      type: "POST", 
      url: "vote.php", 
      data: "like=" + like +"& dislike="+ dislike, 
      success: submitFinished 
      }); 

      function submitFinished(response) { 
    response = $.trim(response); 

    if (response == "success") { 
     jAlert("Thanks for voting!", "Thank you!"); 
     } 

    return false; 
    }); 
}); 
</script> 

<form id="voter" method="post"> 
<input type='image' name='like' id='like' value='like' src='like.png'/> 
<input type='image' name='dislike' id='dislike' value='dislike' src='dislike.png'/> 
</form> 

vote.php:

if ($_POST['like']) 
{ 
    $likeqry = "INSERT INTO test VALUES('','1')"; 
    mysql_query($likeqry) or die(mysql_error()); 
    echo "success"; 
} 

if ($_POST['dislike']) 
{ 
    $dislikeqry = "INSERT INTO test VALUES('','0')"; 
    mysql_query($dislikeqry) or die(mysql_error()); 
    echo "success"; 
} 
+1

請告訴我,這個代碼是一個笑話。您正在使用**最無效的**方式對行進行計數。在結果集上使用'mysql_num_rows()'效率不高,但是迭代遍歷每行的代碼更糟糕。無論如何,使用'SELECT COUNT(*)FROM',然後使用'mysql_result($ resultset,0,0)'得到行數。 – ThiefMaster

+0

^SELECT COUNT(*)FROM voter WHERE like = 0 會好很多 – endy

+0

select like,count(*)from voter group by like would even better:one query to get both likes and dislikes –

回答

2

如果您想在單擊它後更改當前喜歡或不喜歡的數字,您必須返回結果而不是打印它!返回json結果並回顯此內容並更改div innerHTML以查看新結果!

............ 
............ 
............ 
$dislike = mysql_query("SELECT * FROM voter WHERE likes = 0 "); 
$numdislike = 0; 
while($row = mysql_fetch_assoc($dislike)){ 
    $numdislike++; 
} 

echo json_encode(array($numlike, $numdislike)) ; 
exit(); 

現在,在您的html代碼:

 $.ajax({ 
      type: "POST", 
      url: "vote.php", 
      context:$(this) 
      data: "like=" + like +"& dislike="+ dislike, 
      success: submitFinished(data) 
      }); 

      function submitFinished(response) { 
    response = $.parseJSON(response); 
    //Now change number of like and dilike but i don't know where are shown in your html 
    $('#like').attr('value',response[0]); 
    $('#dislike').attr('value',response[1]); 
    return false; 
    }); 
+0

我沒有輸出html部分。你能舉一個例子嗎? – user701510

+0

嗯!我的意思是你的喜歡或不喜歡的數字顯示在哪裏? div?輸入?你在哪裏顯示這個號碼給用戶?你可以改變它的價值! –

+1

在我發佈的第一個PHP代碼部分,我只是使用「echo $ numlike」和「echo $ numdislike」來顯示投票計數。我沒有使用任何div來顯示投票計數。如何在不提交投票的情況下顯示投票計數? – user701510

1

您可以發送一個$ _GET或$ _POST變量給您使用AJAX調用的文件。

.load("google.com", "foo=bar", function(){ 

}); 
+0

可以請你解釋我的示例代碼?我對Jquery和Ajax很陌生。 – user701510