【问题标题】:Daily voting system with IP带IP的每日投票系统
【发布时间】:2015-03-18 21:02:49
【问题描述】:

大家好!

我知道使用 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 地址一次,现在我想做它,这样人们就可以每天使用他们的 IP 地址。

投票.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());
                }
            }        
        }

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

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

【问题讨论】:

  • 我认为这会吓跑人们,因为他们必须验证登录,而我想让它保持快速和简单。
  • 究竟是什么还没有工作@WardP?用这些细节写一个问题的学分,对于现在的大多数人来说似乎有点困难。
  • 我想让人们每天都可以投票,现在他们只能用自己的 ip 地址投票一次。
  • m/d/Y 是迄今为止最不标准的格式,如果您使用 MySQL DATE 列,则会给您带来问题。你应该使用Y-m-d
  • 好的,谢谢!

标签: php mysql database web voting


【解决方案1】:

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

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

如果这返回行(或行数)- '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);

【讨论】:

  • 感谢您的回答!您能否详细说明如何在我的代码中实现这一点?
【解决方案2】:

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

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

_alreadyVote($ip, $today)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多