通过查询ip和投票时间来阻止投票24小时

时间:2015-01-22 21:45:00

标签: php mysql

所以我试图在用户投票后24小时阻止投票,而且我已经被困了一段时间了。我尝试过这个earlier post,但我没有运气。我能够回显ip地址而不是vote_time

我有一个名为voterlist的表的数据库,它有两列:submission_ip和vote_time。 (时间格式如下date("Y-m-d H:i:s",time())

我的php看起来像这样:

<?php
$ip = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$query = "SELECT vote_time FROM voterlist WHERE submission_ip ='$ip'"; 
$result = mysql_query($query);
if(mysql_num_rows($result) < date('Y-m-d H:i:s',strtotime('-24 hour'))) {
   echo 'you can vote again in 24 hours';
}else { 
   echo 'vote now';
}
?>

非常感谢您对此查询的任何帮助。

1 个答案:

答案 0 :(得分:2)

在你的行

if(mysql_num_rows($result) < date('Y-m-d H:i:s',strtotime('-24 hour'))) {

你到底想要做什么?

第一个术语mysql_num_rows($result)是查询返回的行数。第二个术语date('Y-m-d H:i:s',strtotime('-24 hour'))是一些日期字符串,如2015-01-25 22:47:00。您正在比较它们,为什么

而是检查查询中的日期:

SELECT vote_time FROM voterlist WHERE submission_ip ='$ip' AND `vote_time` > timestampadd(day, -1, now())

然后,如果mysql_num_rows($result)给你一个或多个,这意味着有一个记录,所以在过去24小时内进行了投票。如果行数为0,则在过去24小时内没有投票。

除此之外,IP阻止是一个坏主意。你想在一名员工投票后阻止整个公司吗?您可以使用某些OpenID提供程序进行身份验证,以确保人们只投票一次,但是,隐私可能是个问题。如果您有一个允许投票的人员列表(并且它不是每个人都可以),那么您可以将系统视为RIES,这在某些选举中被用于荷兰几年前。 (2008年该软件发布并显示存在广泛的安全问题。)

另请注意,mysql_*函数已被弃用(docs),支持PDO_MySQL和mysqli_*