2

描述:

我正在为我构建的 Web 应用程序创建评论/回复功能。我有一个帖子,我也想链接这些评论。为了减少垃圾邮件并鼓励社区参与,我想对每个评论/回复实施投票系统。

问题:

我知道如何设置数据库,也知道如何显示赞成票/反对票。我唯一不知道该怎么做就是保持投票......即使用户刷新页面也投票。我不希望用户能够在单个帖子上多次投票。类似于此网站上的投票,它会跟踪您已经投了黄色的赞成票。

我想到的:

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

未来,单个用户可能会投出 1000 多张选票。

编辑:

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

资源:

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

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

奖金问题:

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

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

4

2 回答 2

2

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

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

以 yahoo 的新闻故事为例 - 当您请求一个您已发表评论的页面时,您自己的评论会禁用投票按钮。通过在浏览器的开发工具中对页面进行一些黑客攻击,您可以启用这些按钮。您甚至可以点击它们并为您自己的帖子投票——尽管只有一次。

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

另一方面,Stack Overflow 总是显示相同的 html - 但是当您单击为自己的评论投票时,服务器端代码对这个想法犹豫不决,并且响应基本上是 'bugger-off!你不能这样做'已经收到来自服务器的否定结果,页面上的 javascript 会弹出消息,而不是更新投票计数。

于 2012-10-12T20:26:19.310 回答
0

我建议您在页面中创建一个“隐藏字段”,以存储有关用户赞成/反对票的信息。这是你将如何使用它:

如果用户赞成/反对,则显示赞成票的 javsvscript 将字段设置为可能为 true 以指示投票状态,并且还会向服务器发送 AJAX 请求,服务器将在用户配置文件中记录投票状态数据库。

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

于 2012-10-12T20:03:54.207 回答