Php 基于IP的日常投票系统

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地址为每个答案投票

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

数据库: 表选项:id和名称这是保存投票答案的表。表投票者:id、option_id、ip、today和number这是一个表,其中包含投票者ip地址、他想投票的答案、他投票的日期(尚未生效)以及用于获得总投票数的数字

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

php显示投票的问题和答案

php允许用户插入投票答案

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());
                }
            }        
        }
我需要跟踪当天并检查当前日期是否等于投票用户数据库中的日期。如果不一样,用户应该能够再次投票,并设置新的日期

谢谢你的阅读!
请询问我是否希望我发布更多代码。

执行此类查询以确定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
是目前为止最不标准的格式,如果你使用MySQL
DATE
列,它会给你带来问题。您应该使用
Y-m-d
。好的,我会更改的,谢谢!谢谢你的回答!你能解释一下我如何在代码中实现这一点吗?
$sql = "UPDATE ".$this->_voterTable." SET latestVoteDate = CURDATE() WHERE ip = '" . $ip . "';";
mysqli_query($conn, $sql);