带IP的每日投票系统
Daily voting system with IP
大家好!
我知道使用 IP 地址并不是投票系统的最佳方式,但在我的情况下没问题!
我想要实现的目标:管理员可以为投票设置一个问题。用户回答问题并可以每天使用他们的 IP 地址为每个答案投票。
到目前为止我所知道的:管理员可以为投票设置一个问题。用户可以使用他们的 IP 地址回答一次问题。 (每个IP地址只能投票一次)
数据库:
Table 选项:id 和 name 这是 table 保存民意调查的答案。 Table voters: id, option_id, ip, today and number 这个是table里面有voter ip地址,他要投票的答案,他投票的日期(还没有工作)和用于获得总票数的数字。
我有 3 个 php 文件:muziek.php、insertM.php 和 vote.php
muziek.php 显示投票的问题和答案。
insertM.php 允许用户插入对投票的回答。
vote.php 进行投票。
人们只能使用他们的 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());
}
}
}
我需要跟踪日期并检查当前日期是否等于投票用户数据库中的日期。如果不相同,用户应该可以再次投票并设置新的日期。
感谢阅读!
请问我是否需要我 post 更多代码。
执行这种查询以确定 IP 地址和当前日期的组合 returns 是否有任何结果:
$sql = "SELECT COUNT(*) as rowCount FROM ".$this->_voterTable." WHERE ip='".$ip."' AND DATE(latestVoteDate) = CURDATE()";
如果此 returns 行(或行数)- 应拒绝 'persons' 投票能力。如果不是这种情况,则可以进行投票。投票后,将ip地址($ip
)所在行的latestVoteDate
更新为CURDATE()
.
$conn = mysqli_connect("localhost","my_user","my_password","my_db");
$query = mysqli_query( $conn, $sql );
$data = mysqli_fetch_assoc( $query );
if($data['rowCount'] > 0)
{
die("You are not allowed to vote");
}
else
{
// Show the voting page or partial
}
然后,当投票动作实际发生时,将包含正确IP的行更新为当前日期:
$sql = "UPDATE ".$this->_voterTable." SET latestVoteDate = CURDATE() WHERE ip = '" . $ip . "';";
mysqli_query($conn, $sql);
$today 在 _alreadyVote($ip) 范围内看起来是空的。
我建议使用两个参数调用该函数。
_alreadyVote($ip, $today)
大家好!
我知道使用 IP 地址并不是投票系统的最佳方式,但在我的情况下没问题!
我想要实现的目标:管理员可以为投票设置一个问题。用户回答问题并可以每天使用他们的 IP 地址为每个答案投票。
到目前为止我所知道的:管理员可以为投票设置一个问题。用户可以使用他们的 IP 地址回答一次问题。 (每个IP地址只能投票一次)
数据库: Table 选项:id 和 name 这是 table 保存民意调查的答案。 Table voters: id, option_id, ip, today and number 这个是table里面有voter ip地址,他要投票的答案,他投票的日期(还没有工作)和用于获得总票数的数字。
我有 3 个 php 文件:muziek.php、insertM.php 和 vote.php
muziek.php 显示投票的问题和答案。
insertM.php 允许用户插入对投票的回答。
vote.php 进行投票。 人们只能使用他们的 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());
}
}
}
我需要跟踪日期并检查当前日期是否等于投票用户数据库中的日期。如果不相同,用户应该可以再次投票并设置新的日期。
感谢阅读! 请问我是否需要我 post 更多代码。
执行这种查询以确定 IP 地址和当前日期的组合 returns 是否有任何结果:
$sql = "SELECT COUNT(*) as rowCount FROM ".$this->_voterTable." WHERE ip='".$ip."' AND DATE(latestVoteDate) = CURDATE()";
如果此 returns 行(或行数)- 应拒绝 'persons' 投票能力。如果不是这种情况,则可以进行投票。投票后,将ip地址($ip
)所在行的latestVoteDate
更新为CURDATE()
.
$conn = mysqli_connect("localhost","my_user","my_password","my_db");
$query = mysqli_query( $conn, $sql );
$data = mysqli_fetch_assoc( $query );
if($data['rowCount'] > 0)
{
die("You are not allowed to vote");
}
else
{
// Show the voting page or partial
}
然后,当投票动作实际发生时,将包含正确IP的行更新为当前日期:
$sql = "UPDATE ".$this->_voterTable." SET latestVoteDate = CURDATE() WHERE ip = '" . $ip . "';";
mysqli_query($conn, $sql);
$today 在 _alreadyVote($ip) 范围内看起来是空的。
我建议使用两个参数调用该函数。
_alreadyVote($ip, $today)