禁用对用户评论的多重投票

时间:2012-10-12 19:47:07

标签: php javascript mysql

说明

我正在为我构建的网络应用创建评论/回复功能。我有一篇帖子,我也希望将这些评论链接起来。为了减少垃圾邮件并鼓励社区参与,我想对每条评论/回复实施投票系统。

问题:

我知道如何设置数据库,我知道如何显示upvotes / downvotes。我唯一不知道该做的是保持投票...即使用户刷新页面也投票。我不希望用户能够在一个帖子上多次投票。像在这个网站上的投票,它跟踪你已经投票黄色upvote。

我的想法:

  • 将帖子ID放在cookie中,并附加user_id。对cookie的简单检查可以阻止用户再次投票
  • 在表格帖子ID中放置一个唯一约束...但这是我感到困惑的地方。我是否应该为投票的帖子设置一个单独的表格?数据库架构的想法(我认为)在这里:https://stackoverflow.com/a/12350981/185672
  • 将所有ID保存在会话数组中并检查所有已投票的ID ...但这会变得很大。
  • Cookie和数据库的组合以减少数据库调用次数。

将来可能会有一千个用户投票。

编辑:

我发现将结果存储在数据库中是必须的。如果用户具有有效的投票权限而不拨打1000个电话,我该如何检查每个回复/评论?

资源:

帮助解决了一些垃圾邮件问题,但没有回答最初的问题: https://stackoverflow.com/a/2333085/185672

旧解决方案,解释如何计票但不保持“upvote”检查。 http://www.9lessons.info/2009/08/vote-with-jquery-ajax-and-php.html

加分问题:

如果你们知道一个伟大的脚本,可以让我将评论系统(与投票)同步到我已经建立的应用程序中?

另外,我试图找到重复项,但我不能。

2 个答案:

答案 0 :(得分:2)

是的,只需保留一个单独的表来跟踪用户投票。由于您知道哪个用户正在请求该页面,因此您可以轻松加入投票表以确定当前用户是否有资格对页面上的每个帖子进行投票。对于每个帖子,如果它们符合条件,则输出一个版本的html,如果它们不然后输出另一个。

一旦ajax请求要求进行投票的php文件,您就可以再次检查该用户是否有资格投票 - 即他们正在改变他们的投票,或者他们之前没有投票。

以雅虎的新闻报道为例 - 当您请求一个您发表评论的页面时,您自己的评论已禁用投票按钮。通过在浏览器的开发工具中对页面进行一些黑客攻击,您可以启用按钮。你甚至可以点击它们并投票给自己的帖子 - 虽然只有一次。

所以,你可以看到他们有2/3的正确,并根据用户的投票资格输出html。它们还可以防止多次投票(服务器端),他们只是不进行服务器端检查,以确保您没有投票支持自己的评论。

另一方面,Stack Overflow总是显示相同的html - 但是当你点击投票选择你自己的评论时,服务器端的代码就会对这个想法产生影响,而且响应基本上是'bugger-off!你不能这样做'从服务器收到否定结果,页面上的javascript弹出消息,而不是更新投票数。

答案 1 :(得分:0)

我建议您在页面中创建一个“隐藏字段”,用于存储有关用户的upvote / downvote的信息。这就是你如何使用它:

如果用户upvotes / downvotes,则显示upvote上的javsvscript,将该字段设置为true以指示投票状态,并且还会向服务器发送AJAX请求,其中服务器将记录投票状态用户个人资料数据库。

然后,只要为特定用户重新加载帖子,服务器就会将隐藏字段服务器端设置为true或false,具体取决于存储在数据库中的投票记录。 JS会在加载时检查隐藏字段并相应地设置页面上的投票(您可能需要一个额外的隐藏字段来指示它是投票还是投票)。

相关问题