PHP投票,每个IP每天一票:需要代码帮助

Posted

技术标签:

【中文标题】PHP投票,每个IP每天一票:需要代码帮助【英文标题】:PHP voting, one vote per IP per day: code help needed 【发布时间】:2013-06-05 11:47:50 【问题描述】:

我正在开发一个非常基本的网站,该网站允许人们每 24 小时对每个 IP 地址的项目(游戏)进行一次投票。投票存储在名为 votes 的表中,列包含投票 ID、游戏 ID、投票日期和 IP 地址。

用户通过 ...vote.php?id=#(其中 # 是 gid)进入该游戏的投票页面。这是我当前的 vote.php 的简化版本,它不起作用:

<?php
$gid = $_GET["id"];
$ip = $_SERVER['REMOTE_ADDR'];
require_once ('config.php');
$q = "SELECT * FROM votes WHERE (gid=$gid)";
$r = @mysqli_query($dbc, $q);

if ($r) 
while ($row = mysqli_fetch_array($r)) 

    if ($row['ip'] != $ip)  // If no IP exists, go ahead and vote.

        $q2 = "INSERT INTO votes (gid, votedate, ip) VALUES ('$gid', NOW(), '$ip' )";
        $r2 = @mysqli_query($dbc, $q2);
        if ($r2) 
                echo 'Thank you for voting';
         else 
            echo 'There was a problem with your vote'
            

     elseif ($ip == $row['ip']) 
    // If IP address exists, check date of last time they voted for this game

        // Define the two dates
        $votedate = $row['votedate'];
        $now = date("Y-m-d H:i:s");
        // Calculate hours between the dates
        $diff = round((strtotime($now) - strtotime($votedate)) / (60 * 60));
        // Create variable for when user can return.
        $return = '24' - $diff;

        if ($diff > '24')  // Allow to vote once every 24 hours
            $q3 = "INSERT INTO votes (gid, votedate, ip) VALUES ('$gid', NOW(), '$ip' )";
            $r3 = @mysqli_query($dbc, $q3);

            // Display outcome of insert query:
            if ($r3) 
                echo 'Thank you for voting, please come back in 24 hours to vote again!';
             else 
                echo 'There was a problem with your vote:' . mysqli_error($dbc) . ' in reference to query ' . $q3;
            
         else 
            echo 'Sorry, you\'ve already voted in past 24 hours, please come back again in ' . $return . ' hours.';
        

     

 // End of while $r loop

 else 

echo 'Sorry, your query did not work.';

 // End of overall if $r ran

mysqli_close($dbc);

exit();
?>

我的目标是让它这样工作:

从 URL 中获取 gid,并找到与该 gid 相关的所有投票。如果用户之前从未为该 gid 投票,则允许添加新的投票。如果用户投票给了那个 gid 检查以前投票的日期。如果最后一次投票超过 24 小时,则允许对该 gid 进行另一次投票。如果最后一次投票是在 24 小时内,则拒绝对该游戏的新投票。

很想听听您对此的看法...


我查看了其他投票系统,但无法将 jQuery、AJAX 等系统调整为我想要的,所以我认为一个非常基本的 PHP 系统最适合我有限的理解。我还希望能够仅列出过去 30 天内的投票,而其他投票插件的数据库设计不允许这样做。不过,如果有人有更好的选择,我会很高兴——因为我知道这个很笨重。

干杯!

【问题讨论】:

什么不能用它“工作”? 【参考方案1】:

小心,对于使用相同类型的数学运算:

试试 floatval()

$diff = floatval(round((strtotime($now) - strtotime($votedate)) / (60 * 60)));

$return = 24.0 - $diff;

if ($diff > 24.0) 

    /* Your code */

【讨论】:

以上是关于PHP投票,每个IP每天一票:需要代码帮助的主要内容,如果未能解决你的问题,请参考以下文章

6月1日,首日线上投票排名情况

PHP/SQL 投票和计算结果

防刷票系统的方案

华为机试题 HJ94记票统计

华为机试题 HJ94记票统计

Java 服务器获取客户端IP