所以我试图在用户投票后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';
}
?>
非常感谢您对此查询的任何帮助。
答案 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_*
。