具有IP的每日投票系统

时间:2015-01-20 15:06:13

标签: php mysql database web voting

大家好!

我知道使用IP地址并不是投票系统的最佳方式,但就我而言,它很好!

我想要实现的目标:管理员可以为民意调查设置问题。用户回答问题,并可以使用他们的IP地址每天为每个答案投票。

我到目前为止:管理员可以为民意调查设置问题。用户可以使用他们的IP地址回答一次问题。 (每个IP地址只能投票一次)

数据库: 表选项:id和name这是保存轮询答案的表。表选民:id,option_id,ip,today和number这是保存选民IP地址,他想投票的答案,他投票的日期(尚未工作)以及用于获得总数的数字的表投票。

我有3个php文件:muziek.php,insertM.php和vote.php

muziek.php显示了民意调查的问题和答案。

insertM.php允许用户插入民意调查的答案。

vote.php为投票进行投票。 人们只能使用他们的ip adres一次,现在我想这样做,这样人们就可以每天使用他们的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());
                }
            }        
        }

我需要跟踪当天并检查当前日期是否等于投票用户数据库中的日期。如果不一样,用户应该能够再次投票并设置新的日期。

感谢阅读! 请问我是否要我发布更多代码。

2 个答案:

答案 0 :(得分:2)

执行此类查询以确定IP地址和当前日期的组合是否会返回任何结果:

$sql = "SELECT COUNT(*) as rowCount FROM ".$this->_voterTable." WHERE ip='".$ip."' AND DATE(latestVoteDate) = CURDATE()";

如果返回行(或行数) - 应拒绝“人员”的投票能力。如果不是这种情况,则可以进行投票。投票后,使用IP地址(latestVoteDate)更新行$ipCURDATE()

$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);

答案 1 :(得分:1)

$ today在_alreadyVote($ ip)范围内看起来是空的。

我建议用两个参数调用该函数。

_alreadyVote($ ip,$ today)