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

Php 禁用对用户评论的多重投票,php,javascript,mysql,Php,Javascript,Mysql,说明: 我正在为我构建的web应用程序创建评论/回复功能。我有一个帖子,我想链接这些评论了。为了减少垃圾邮件并鼓励社区参与,我想在每条评论/回复上实施投票系统 问题: 我知道如何设置数据库,我知道如何显示向上投票/向下投票。我唯一不知道该怎么做的就是保留投票权。。。即使用户刷新页面也已投票。我不希望一个用户能够在一篇文章上投票超过一次。类似于这个网站上的投票,它跟踪你已经用黄色的向上投票 我想到的是: 将帖子id放入cookie中,并附加用户id。对cookie的简单检查可以阻止用户再次投票

说明:

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

问题:

我知道如何设置数据库,我知道如何显示向上投票/向下投票。我唯一不知道该怎么做的就是保留投票权。。。即使用户刷新页面也已投票。我不希望一个用户能够在一篇文章上投票超过一次。类似于这个网站上的投票,它跟踪你已经用黄色的向上投票

我想到的是:

  • 将帖子id放入cookie中,并附加用户id。对cookie的简单检查可以阻止用户再次投票
  • 在表格post id中放置唯一约束。。。但这就是我困惑的地方。我是否应该为投票后的帖子单独设置一张表?数据库模式思想(我认为)如下:
  • 将所有ID保留在会话数组中,并对照所有已投票的ID进行检查。。。但这将是巨大的
  • cookie和数据库的组合,以减少数据库调用的数量
将来,一个用户可能会投下1000张选票

编辑:

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

资源:

帮助解决了一些进一步的垃圾邮件问题,但没有回答最初的问题:

旧的解决方案,解释如何计算选票,但不保持“upvote”检查。

奖金问题:

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

还有,我试着找到重复的,但就是找不到

我建议您在页面中创建一个“隐藏字段”,用于存储用户的向上/向下投票信息。以下是您将如何使用它:


如果用户向上投票/向下投票,则上的javsvscript将显示向上投票,将字段设置为“可能为真”以指示投票状态,并且还将向服务器发送AJAX请求,服务器将在其中将投票状态记录在用户配置文件数据库中


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

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

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

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

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


另一方面,堆栈溢出总是显示相同的html,但是当你点击为自己的评论投票时,服务器端的代码会对这个想法感到困惑,而响应基本上是“bugger off!”!您不能这样做,因为收到服务器的否定结果后,页面上的javascript会弹出消息,而不是更新投票计数。

用户仍然可以删除cookie并再次投票。实际上,最好的方法是拥有服务器端会话值。如果你真的不想获得额外的投票权,那么它需要是服务器端会话。假设您有一个用于注释并为注释提供ID的表,那么您需要一个用于注释投票的表,该表具有一个用于commentID和userID的字段。通过这种方式,您可以进行呼叫检查,查看用户是否已经对x评论进行了投票,这也使得收回用户投票变得很容易。@Snuffleupagus,但您可能会在每条评论中有500个用户/reply@Phil我是说,这不是我们有数据库的原因吗P如果你不那样做,你会怎么做?您将无法跟踪用户投票的内容,客户端的任何内容都很容易通过。您能否详细说明“取决于数据库中存储的投票记录。”“服务器将在用户配置文件数据库中记录投票状态”,对吗?因此,当用户请求帖子时,服务器会检查“用户配置文件数据库”,如果用户以前对此帖子进行过投票(当然,您会使用帖子id来实现)。我是否会对每个评论进行“有效性检查”?如果我有100条回复或评论呢?