检查用户是否已投票

时间:2013-01-22 17:33:45

标签: php mysql sql

我创建了一个民意调查系统,只有登录用户才可以投票。我有一个表,我将一个外键存储给用户和这样的民意调查:

poll_voters
| ref_user_id | ref_poll_id |

当用户投票时,我检查表中是否存在当前民意调查的用户ID。如果是,则用户已经投票。

我想知道是否应该在每个页面加载时执行此操作以了解是否显示投票表单或结果(如果用户已经投票)。另一种方法是建立一个会话,说明用户是否已投票。当他登录时,我需要进行检查并设置会话。

你认为我应该怎么做?

5 个答案:

答案 0 :(得分:1)

我建议您在没有投票指示符的情况下呈现所有HTML,然后在浏览器中加载页面后执行AJAX调用以获取项目的投票状态。

这允许您将页面缓存在浏览器上或静态缓存在服务器上,但仍支持动态更新。因此,如果用户再次访问该页面,并且他们已更改了已更新的投票状态。

否则,您必须始终为每个用户的会话重新呈现所有HTML页面。

答案 1 :(得分:1)

您可以将其添加到插入语句

if not exists(select ref_user_id 
    from poll_voters 
    where ref_user_id =@ref_user_id and ref_poll_id = @ref_poll_id)
insert into poll_voters (ref_user_id ,ref_poll_id )
values (@ref_user_id ,@ref_poll_id )

如果每个人每次投票只投票一次就可以这样做

答案 2 :(得分:1)

当你渲染记录时,用户是否投了一个民意调查投票。如果投票则不显示投票指标,在插入数据库之前检查记录是否存在。从我的经验来看,我认为这是将是最好的方式。

答案 3 :(得分:0)

最好有一个会话,并在用户登录时检查投票状态。没有必要在每个页面加载时检查数据库,这将是低效的(尽管如果负载是光)。

当用户投票时,您还需要刷新页面(或元素,使用ajax)。

答案 4 :(得分:0)

如果你有一个以上的活跃民意调查,你也应该在数据库中存储一个民意调查ID(你可能不需要更多的民意调查,但是如果是的话会怎样?)。在这种情况下,我可以对每个页面加载进行查询,向用户显示投票或未投票的投票。但是只有最新的民意调查应该显示在每个页面上,并且只查询最新的民意调查......