Php 在投票系统中每人只能投一票

Php 在投票系统中每人只能投一票,php,voting-system,Php,Voting System,我正在开发一个小的发布系统,这样我可以在我的网站上发布帖子,人们可以喜欢也可以不喜欢 看起来是这样的: 目前,你可以随意多次投赞成票和反对票。我知道如何使用JavaScript使图像不可点击,但我还需要一种在PHP中实现这一点的方法,因为有人可以使用fireBug或Chrome控制台使按钮再次可点击 这可能是我用PHP实际做的第一件事,所以我还是个初学者。谢谢您的建议。您需要在服务器端(即PHP代码)对其进行验证。您可以通过IP地址(如果未登录的用户/来宾)或用户名(对于登录的用户)执行此操作

我正在开发一个小的发布系统,这样我可以在我的网站上发布帖子,人们可以喜欢也可以不喜欢

看起来是这样的:

目前,你可以随意多次投赞成票和反对票。我知道如何使用JavaScript使图像不可点击,但我还需要一种在PHP中实现这一点的方法,因为有人可以使用fireBug或Chrome控制台使按钮再次可点击


这可能是我用PHP实际做的第一件事,所以我还是个初学者。谢谢您的建议。

您需要在服务器端(即PHP代码)对其进行验证。您可以通过IP地址(如果未登录的用户/来宾)或用户名(对于登录的用户)执行此操作


您无法通过客户端验证来阻止用户。

因为您将了解这一点,所以我不会发布任何完整的代码。不过,我可以给出一个概述

最好的方法是在数据库表(可能是MySQL)中存储投票:

其中:

  • vote\u id
    是一个自动递增的列,为每个投票创建一个唯一的id
  • user\u id
    是提交此投票的用户的标识符
  • post\u id
    是用户正在投票的帖子的标识符
  • 投票
    确定此投票是赞成还是反对

现在,您可以形成查询,以确定是否有人已经对该帖子进行了投票,并采取相应的行动。

我不会只为您编写代码,脚本网站上可能有几十个可行的示例。以下是一些提示,可以帮助您找到正确的方向:

会话变量-
$\u Session[]
-检查是否已设置,然后在表决后设置它们。只要他们不关闭浏览器,他们就无法再次投票

COOKIE-
$\u COOKIE[]
-与会话相同,但即使关闭并再次打开浏览器,也可以保留

IP地址-
$\u服务器['REMOTE\u ADDR']
-在MySQL IP和投票表中保留一条记录

登录系统-只允许经过身份验证的用户投票,然后在数据库中跟踪投票


上述任何组合均可接受。希望这能为你指明正确的方向。

定义什么是“人”?如何区分一个“人”与另一个“人”?除了存储计票外,还需要存储投票的“人”。然后,当点击按钮时,你可以验证他们是否已经投票了。那么你认为它可以与JS一起工作?如果用户重新加载页面会发生什么?如果你也允许非用户投票,恐怕你会很痛苦。没有一个好的方法来处理这种复杂的事情。当然,如果你有定义良好的用户,数据库中有条目……绝对正确,但我不知道用PHP“切齿”是否是一件好事。谢谢,但我得到了投票系统,我只需要帮助我的用户标识符。但是任何人都可以投票,所以我没有会员。我该为用户id部分做些什么?只是想一想:如果任何用户只允许在帖子上投票一次,那么你就不能删掉
vote\u id
并使用
user\u id
post\u id
作为主要外键吗?@Shawn-你需要一些识别用户的方法。如果你没有这一点,那么绝对没有办法确定一个人过去是否对某个职位投票。你如何实现这一点取决于-你可以让人们登录,你可以基于IP地址,或者IP地址和用户代理,或者任何你想要的东西,你可以,实现的这一部分最终是个人偏好。我总是喜欢在表上有唯一的id,然后将
user\u id、post\u id
作为唯一索引。但这类细节似乎过于深入,无法概括。是的,我知道,这就是我所说的,我想使用PHP,而js将只是一个小小的展示。但主要部分将是PHP。如何存储IP?当用户单击链接时,您可以通过
$\u SERVER['REMOTE\u ADDR']
知道用户的IP地址,您需要将其作为单独的字段存储在数据库中。因此,下次当同一用户再次尝试投票时,您可以对照您的db表检查IP。谢谢Tim,这也回答了我要问的一个问题,即我的网站上每个发布的图像只能投1张赞成票/反对票。但对于cookie,如果清除浏览器cookie,是否可以记录第二次“喜欢/不喜欢”投票?我如何永久存储他们的投票。。。我应该将他们的IP存储在数据库中吗?@Growler我肯定会将数据存储在MySQL数据库中,这样即使他们清除了数据,他们也不能多次投票。然而,使用移动设备或代理会否定这一点,但如果他们真的想花时间和精力使用代理,他们的投票数可能会限制在6票以内。
| vote_id | user_id | post_id | vote |