Php 基于IP的日常投票系统
大家好强> 我知道使用IP地址不是投票系统的最佳方式,但在我的情况下,它是好的 我想要实现的是:管理员可以为投票设置一个问题。用户回答问题,并可以每天使用其IP地址为每个答案投票 到目前为止,我拥有的是:管理员可以为投票设置一个问题。用户可以使用他们的IP地址回答问题一次。(您只能为每个IP地址投票一次) 数据库: 表选项:id和名称这是保存投票答案的表。表投票者:id、option_id、ip、today和number这是一个表,其中包含投票者ip地址、他想投票的答案、他投票的日期(尚未生效)以及用于获得总投票数的数字 我有3个php文件:muziek.php、insertM.php和vote.php php显示投票的问题和答案 php允许用户插入投票答案 php为投票进行投票。Php 基于IP的日常投票系统,php,mysql,database,web,voting,Php,Mysql,Database,Web,Voting,大家好 我知道使用IP地址不是投票系统的最佳方式,但在我的情况下,它是好的 我想要实现的是:管理员可以为投票设置一个问题。用户回答问题,并可以每天使用其IP地址为每个答案投票 到目前为止,我拥有的是:管理员可以为投票设置一个问题。用户可以使用他们的IP地址回答问题一次。(您只能为每个IP地址投票一次) 数据库: 表选项:id和名称这是保存投票答案的表。表投票者:id、option_id、ip、today和number这是一个表,其中包含投票者ip地址、他想投票的答案、他投票的日期(尚未生效)以及
人们只能使用一次ip地址,现在我想让人们每天都可以使用ip地址。 vote.php:
private function _alreadyVote($ip,$today)
{
$sql = "SELECT * FROM ".$this->_voterTable." WHERE ip='".$ip."' AND DATE(today) = CURDATE()";
$result = $this->_query($sql);
return sizeof($result)>0;
}
//public functions
public function vote($optionId)
{
$ip = $_SERVER['REMOTE_ADDR'];
$today = date('Y-m-d');
if(!$this->_alreadyVote($ip,$today)){
$sql ='INSERT INTO '.$this->_voterTable.' (id,option_id,ip,today) '.' VALUES(NULL,"'.mysql_real_escape_string($optionId).'","'.mysql_real_escape_string($ip).'","'.mysql_real_escape_string($today).'")';
mysqli_query($conn, $sql);
$result = mysql_query($sql,$this->_con);
if(!$result){
die('unable to insert'. mysql_error());
}
}
}
我需要跟踪当天并检查当前日期是否等于投票用户数据库中的日期。如果不一样,用户应该能够再次投票,并设置新的日期
谢谢你的阅读!
请询问我是否希望我发布更多代码。执行此类查询以确定IP地址和当前日期的组合是否返回任何结果:
$sql = "SELECT COUNT(*) as rowCount FROM ".$this->_voterTable." WHERE ip='".$ip."' AND DATE(latestVoteDate) = CURDATE()";
如果返回行数(或行数)-“个人”投票权应被拒绝。如果不是这样,就可以进行表决。表决后,使用ip地址($ip
)将行的latestVoteDate
更新为CURDATE()
然后,当投票操作实际发生时,将包含正确IP的行更新到当前日期:
$sql = "UPDATE ".$this->_voterTable." SET latestVoteDate = CURDATE() WHERE ip = '" . $ip . "';";
mysqli_query($conn, $sql);
$today在_alreadyVote($ip)范围内看起来是空的 我建议用两个参数调用函数
_alreadyVote($ip$today)我认为这会吓跑人们,因为他们必须验证登录,我想让它快速、简单。到底什么东西还不起作用@WardP?写一个有这些细节的问题对现在的大多数人来说似乎有点困难。我想让人们每天都可以投票,现在他们只能用自己的ip地址投票一次。
m/d/Y
是目前为止最不标准的格式,如果你使用MySQLDATE
列,它会给你带来问题。您应该使用Y-m-d
。好的,我会更改的,谢谢!谢谢你的回答!你能解释一下我如何在代码中实现这一点吗?
$sql = "UPDATE ".$this->_voterTable." SET latestVoteDate = CURDATE() WHERE ip = '" . $ip . "';";
mysqli_query($conn, $sql);