单击“赞”时,使用ajax异步更新mysql字段

时间:2011-09-17 18:34:39

标签: php javascript mysql ajax prototypejs

问题很简单。每当用户点击“喜欢”时,我想使用javascript通过ajax更新mysql数据库。我已经尝试了所有方法有点找不到任何帮助。我知道我还需要服务器端脚本,但是ajax是主要问题。

这是我设置的计数器代码。

 document.observe("dom:loaded", function()
{
  $("likeForumLink").onclick=processForumLike;

});


function processForumLike(event)
{

  var numberOfLikes=parseInt($("hiddenLikes").value); 

   numberOfLikes+=1;

  $("hiddenLikes").value=numberOfLikes+""; 

   this.innerHTML="You liked this"; 

  if(numberOfLikes==1)
  {
   $("numberOfLikes").innerHTML="("+numberOfLikes+" like)";

  }          
 else
 {
 $("numberOfLikes").innerHTML="("+numberOfLikes+" likes)";
 }

var likes=$("hiddenLikes").value;

new Ajax.Request("seeForum.php?id=$("subjectId").value", {

  method:'get', 
  parameters:{hiddenLikes:likes},      
  onSuccess: ????  //Don't know
  onComplete:???   //Don't know
  on Failure:????  //Don't know

 });
}

然后我可以使用我的服务器端脚本,如下所示。 附:它位于同一页"seeForum.php?subjectId=$("subjectId").value"

  <?php if(isset($_GET["hiddenLikes"]))
    {

     $updateQuery="UPDATE `subject table` SET  `likes`='".$_GET["hiddenLikes"]."' where `subjectId`='".$_REQUEST['subjectId']."' ";

     $result=mysql_query($updateQuery);

     checkConnect($result,"query of $updateQuery");


 ?> 

请帮忙。我的所有工作都停止了。

2 个答案:

答案 0 :(得分:2)

首先,您不应该使用GET请求来更新数据,这应该是POST。这个:

"seeForum.php?id=$("subjectId").value"

不会做你认为它做的事情。它所做的是导致语法错误,因为它看起来像JavaScript解释器的"x" x "x"而不是JavaScript。我不确定您使用的是哪个JavaScript库(也许是Prototype?)但我认为您可能希望将所有参数都放入parameters以避免担心URL编码等问题。此外,没有理由告诉服务器你已经拥有多少“喜欢”,并且有充分的理由不这样做:有人可能已经“喜欢”了这个页面,而你正在查看你现在拥有的一些喜欢的内容。错误;所以根本不需要hiddenLikes

这样的事情在JavaScript方面会更好:

new Ajax.Request("likeIt.php", {
  method:     'post', 
  parameters: { id: $('subjectId').value },
  onSuccess:  function(transport) {
      // Update the "likes" label with something like this,
      // I'm not that familiar with Prototype though so I'm
      // guessing.
      $('likes_label').update(transport.responseText);
  },
  onComplete: ????  // The function to call when it has finished.
  onFailure:  ????  // The function to call when it doesn't work.
});

然后,在PHP中,只需向数据库发送一个简单的UPDATE即可增加likeIt.php中的喜欢数量,如下所示:

<?php
# Perform whatever authentication you need...
if(isset($_POST["id"])) {
    # Set up your database connection and then...
    $result = mysql_query("UPDATE `subject_table` SET `likes` = `likes` + 1 WHERE `subjectId` = '" . mysql_real_escape_string($_POST["id"]) . "'");
    # Check $result and send some data back to the client (if desired), if
    # you send something back then the onComplete, onFailure, and onSuccess
    # JavaScript functions would be responsible for doing something with it.
}
# Send back the updated number of "likes" as text/plain.
?> 

答案 1 :(得分:0)

仔细思考,如果用户点击了,你真正想做的就是在页面本身中增加类似的计数器。您可以在onComplete: function(){ increment the like counter }中执行此操作。如果确实发生了某种错误,我认为你不想将它显示给用户,取决于你想要如何处理该部分,许多方法,你可以记录错误。