我最近为我的漫画网站实施了自定义喜欢和不喜欢的功能。我想让用户通过“取消点击”喜欢或不喜欢的按钮来“收回”他们的选择。
我的功能是:
1)通过Jquery传递按钮值(id ='like'或id ='dislike') php脚本
2)脚本将首先检查数据库中是否存在ip 给出漫画ID ...如果不是它将插入用户的IP和当前 漫画ID ...如果确实如此,它最初说“你已经投票了”......但现在实施“不喜欢”,我只会让它运行删除查询
3)然后它将获得该漫画ID的总流量 增量。
我认为可以做到的方式是,如果用户再次按下按钮,我基本上运行相反的查询...从表中删除该用户的投票给出漫画ID ...然后减少该图像的总喜欢在漫画表中。
所以我的问题是,
1)如果他们按一次按钮,然后删除,则进行插入查询 查询他们是否“取消选择”同一选择的最佳实施方式 这个?用户无法连续发送垃圾邮件并使数据库过载 按下喜欢按钮,从而不断喜欢和不喜欢? 我应该为该ID实现某种$ _SESSION ['count']吗?
2)如果我正在存储某个IP ...如果有几个uniques,会发生什么 用户碰巧使用同一台计算机...让我们说一个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);
?>
答案 0 :(得分:1)
1)我会说是的,使用计数功能来限制他们可以连续按下按钮的次数。可能不会有太多麻烦,除非它们达到非常高的数字,我相信一个简单的循环就可以了。
2)我不会只存储IP。我会尝试使用不仅仅是IP作为标识符的东西,比如IP和会话cookie - 这是唯一的。但是在回顾服务器时,您必须解析数据库中的条目。或者也许是mac地址。我不确定你是否可以访问它。 How can I get the MAC and the IP address of a connected client in PHP?
我确信还有另一种方式,但从概念上讲,这就是我看到它的运作方式。