2012-07-30 167 views
3

我正在研究一个小贴子系统,这样我就可以在我的网站上张贴帖子,人们可以喜欢并且不喜欢它。在投票系统上只允许每个人投一票

它看起来像这样:

the voting system

在可以给予好评和downvote多次,你想的那一刻。我知道如何让图片无法通过JavaScript进行点击,但我也需要一种方法来在PHP中执行此操作,因为有人可以使用fireBug或Chrome控制台再次使按钮可点击。

这可能是我在PHP中实际制作的第一件事,所以我仍然是初学者。感谢您的任何建议。

+3

定义什么是“人”?你如何区分一个“人”与另一个? – zerkms 2012-07-30 21:15:39

+0

除了存储投票数量之外,还需要存储“谁”投票。然后当按钮被点击时,您可以验证他们是否已经投票。 – Matt 2012-07-30 21:17:38

+0

所以你认为它与JS工作?如果用户重新加载页面会发生什么? – 2012-07-30 21:17:49

回答

0

您需要在服务器端验证它,例如在PHP代码中。您可以通过IP地址(如果未登录用户/来宾)或用户名(用于登录用户)来做到这一点

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

+0

是的,我知道,这就是我说的,我想使用PHP,js只是一点点显示。但主要部分将是PHP。我如何存储IP? – Shawn31313 2012-07-30 21:21:59

+0

当用户点击链接时,您可以通过$ _SERVER ['REMOTE_ADDR']'知道用户的IP地址,您需要将其作为单独的字段存储在数据库中。因此,下一次同一用户试图再次投票时,您会检查IP数据库表。 – Kalpesh 2012-07-30 21:24:05

6

既然你要学习这一点,我不会发布任何完整的代码。不过,我可以给一个概述。

要做到这一点,最好的办法是存储票数据库表(可能的MySQL):

| vote_id | user_id | post_id | vote | 

其中:

  • vote_id是创建一个唯一的ID自动增量列每票
  • user_id是谁的用户提交本次投票
  • post_id的标识是鉴定者用户投票的帖子的过滤器
  • vote确定此投票是否已启动或关闭。

现在,您可以通过形式查询来确定是否有人已对该帖子投了票,并据此采取行动。

+0

绝对正确,但我不知道这是否是一件好事,用PHP“削减你的牙齿”。 – Sablefoste 2012-07-30 21:20:02

+0

谢谢,但我得到了投票系统,我只需要帮助我的用户的标识符。但任何人都可以投票,所以我没有成员。我该如何处理user_id部分? – Shawn31313 2012-07-30 21:21:09

+0

只是一个想法:如果任何用户只允许在帖子上投票一次,那么你不能只剪出'vote_id'并使用'user_id'和'post_id'作为主外键吗? – Palladium 2012-07-30 21:21:49

8

我不会为您编写代码,并且在脚本网站上可能有几十个可行的示例。以下是一些提示,让您指出正确的方向:

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

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

IP地址 - $_SERVER['REMOTE_ADDR'] - 在MySQL表中记录IP和投票。

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

上述的任何组合都是可以接受的。希望能让你指出正确的方向。

+0

感谢蒂姆,这也回答了我要问的关于我的网站上发布的图片有限1个喜欢/不喜欢投票的问题。但是对于cookie,如果他们清除浏览器Cookie,是否有人可以登录第二个喜欢/不喜欢的投票?我如何永久存储他们的投票...我应该将他们的IP存储在数据库中吗? – Growler 2012-11-20 20:12:48

+1

@Growler我肯定会将数据存储在MySQL数据库中,即使他们清除数据,他们也不能多次投票。但是,使用移动设备或代理服务器会否定这一点,但如果他们真的想花费时间和精力使用代理服务器,则可能会将其限制为6票。 – 2012-11-20 20:33:44