2013-02-22 75 views
0

我最近实现了我的漫画网站的自定义喜欢和不喜欢功能。我想让用户能够通过“点击”或“不喜欢”按钮来“收回”他们的选择。实现Facebook风格“不像”功能

My功能的工作原理是:通过jQuery

1)传递按钮值(ID = '喜欢' 或ID = '厌恶')到 PHP脚本

2)脚本将首先检查是否数据库中存在一个IP对 ,给出了漫画ID ...如果不是它会插入用户的IP和当前 漫画ID ...如果它确实,它最初说“你已经投了票”......但现在实现“unliking”,我只是让它运行一个删除查询

3)那么它会得到总喜欢的漫画id和 增量。

,我认为这是可以做到的方法是,如果用户再次按下按钮,我基本上运行相反的查询......从表中删除该用户的投票给出相声ID ...然后再递减的总喜欢对于漫画表中的那张图片。

所以我的问题是

1)做一个插入查询,如果他们按一个按钮一次,然后删除 询问他们是否“取消”同样的选择来实现 的最佳方式这个?用户是否可以通过按下类似按钮连续不断地使垃圾邮件和数据库过载,从而不断地喜欢和不喜欢? 我应该为该ID实现某种$ _SESSION ['count']吗?

2)如果我存储了某个IP ...如果有几个唯一身份验证会发生什么情况 用户碰巧使用同一台计算机......让我们来说一个netcafe ...它会始终存储该用户的IP。是否存储对IP最好的 的方式去?如果你需要一个参考

代码:

<?php 
include 'dbconnect.php'; 
$site = $_GET['_site']; 
$imgid = intval($_GET['_id']); 
$input = $_GET['_choice']; 

if ($site == "artwork") { 
$table = "artwork"; 
} 
else { 
$table = "comics"; 
} 

$check = "SELECT ip, tablename, imgid FROM votes WHERE ip = '".$_SERVER['REMOTE_ADDR']."' AND tablename = '$table' AND imgid = $imgid"; 
$result = $mysqli->query($check); 

if ($result->num_rows == 0) { 
    //Insert voter's information into votes table 
    $sql = "INSERT INTO 
      votes (ip, tablename, imgid) 
     VALUES 
      (\"".$_SERVER['REMOTE_ADDR']."\", \"$table\", $imgid) 
     ON DUPLICATE KEY UPDATE 
      imgid = VALUES(imgid)"; 

     if (!$mysqli->query($sql)) printf("Error: %s\n", $mysqli->error); 

     /*while ($row = $result->fetch_assoc()) { 
      echo "you've inserted: " . $row['ip'] . ", " . $row['tablename'] . ", " . $row['imgid'] . "."; 
     }*/ 

     $result = $mysqli->query("SELECT like_count, dislike_count FROM $table WHERE id = $imgid"); 

     //put the counts into a list 
     list($likes, $dislikes) = $result->fetch_array(MYSQLI_NUM);  

     if ($input == "like") { 
      $sql = "UPDATE $table SET like_count = like_count + 1 WHERE id = $imgid"; 
      $mysqli->query($sql);   
      $likes++; 
     } 
     else if ($input == "dislike") { 
      $sql = "UPDATE $table SET dislike_count = dislike_count + 1 WHERE id = $imgid"; 
      $mysqli->query($sql); 
      $dislikes++;  
     } 
    } 
else { //"unlike" their previous like for that given image id 
     $sql = "DELETE FROM 
        votes 
       WHERE (ip, tablename, imgid) = 
        (\"".$_SERVER['REMOTE_ADDR']."\", \"$table\", $imgid)"; 

     if (!$mysqli->query($sql)) printf("Error: %s\n", $mysqli->error); 

     $result = $mysqli->query("SELECT like_count, dislike_count FROM $table WHERE id = $imgid"); 

     //put the counts into a list 
     list($likes, $dislikes) = $result->fetch_array(MYSQLI_NUM);  

     if ($input == "like") { //remove like 
      $sql = "UPDATE $table SET like_count = like_count - 1 WHERE id = $imgid"; 
      $mysqli->query($sql);   
      $likes--; 
     } 
     else if ($input == "dislike") { 
      $sql = "UPDATE $table SET dislike_count = dislike_count - 1 WHERE id = $imgid"; 
      $mysqli->query($sql); 
      $dislikes--;  
     } 
} 

echo "Likes: " . $likes . ", Dislikes: " . $dislikes; 

mysqli_close($mysqli); 

?> 

回答

1

1)我要说的是,使用计数功能来限制他们的尝试可以连续按下按钮的数量。可能不会有太多麻烦,除非他们打的真的很高的数字,我相信一个简单的循环会很好。

2)我不会只存储IP。我会尝试使用不仅仅是IP作为标识符的东西,比如IP和会话cookie--这种方式是独一无二的。然而,在回顾服务器时,您将不得不从数据库中解析条目。或者也许是mac地址。我不确定你是否有权访问。 How can I get the MAC and the IP address of a connected client in PHP?

我确定还有另一种方式,但概念上,这就是我看到它的工作原理。