php - 如何防止多页?

标签 php html mysql timer

我有一个网站,每个计时器(30 分钟)都会为用户提供 1000 分。 当用户点击“开始计时器”按钮时,计时器倒计时 30 分钟,当计时器结束时,会出现按钮,为用户提供 1000 分。

我的问题是:用户可以多次打开此页面并在 30 分钟而不是 1000 分钟内获得很多积分。

定时器脚本:

<script type="text/javascript">
var interval;
var minutes = 30;
var seconds = 0;
var a;
var audio = new Audio('timer.mp3');

function AutoRefresh( t ) {
    setTimeout("location.reload(true);", t);
}

function countdown(element) {
    interval = setInterval(function () {
        var el = document.getElementById(element);
        if (seconds == 0) {
            if (minutes == 0) {
                el.innerHTML = '<h2>The Timer is over!</h2>';
                el.innerHTML += '<form action="timer.php" method="post" onsubmit="hide();" id="hide"><input type="submit" value="Get 1000 points" name="update" class="newslesubmit" style="width: 100%; font-size: 16px; box-shadow: inset 0px 1px 2px 0px rgba(238,238,238,1);" /></form>';
                audio.play();
                AutoRefresh(600000);
                clearInterval(interval);
                return;
            } else {
                minutes--;
                seconds = 59;
            }
        }
        if (minutes > 0) {
            var minute_text = minutes + (minutes > 1 ? ' :' : ' :');
        } else {
            var minute_text = '';
        }
        if(minutes < 10) {
            var minute_text = '0' + minutes + ' :';    
        }
        var second_text = seconds > 1 ? '' : '';
        if(seconds < 10) {
            var a = ' 0';      
        } else {
            var a = ' ';    
        }
        el.innerHTML = minute_text + a + seconds + ' ' + second_text + '';
        seconds--;
    }, 1000);
}
function start() {
    if (!interval) {
        countdown('countdown');
    }
};
function hide() {
    var hide = document.getElementById('hide');
    hide.style.display='none';
}
</script>

PHP 和 HTML:

<?php
if(isset($_POST['update'])) {
    $req = mysql_query('SELECT last_earn FROM users WHERE id="'.mysql_real_escape_string($_SESSION['userid']).'"');
    $dnn = mysql_fetch_array($req);
    $a = $dnn['last_earn'] + 3000;
    if($a <= time()){
        $date = date('Y-m-d H:i:s');
        mysql_query('UPDATE users SET last_earn="'.$date.'" WHERE id="'.mysql_real_escape_string($_SESSION['userid']).'"');
        mysql_query('UPDATE users SET earn=earn+1000 WHERE id="'.mysql_real_escape_string($_SESSION['userid']).'"');
        echo "<meta http-equiv='refresh' content='0;URL=index.php' />";
    }
}
?>
<input type="button" value="Start timer" onclick="start(); this.style.display='none'" class="newslesubmit" style="width: 100%; font-size: 16px; box-shadow: inset 0px 1px 2px 0px rgba(238,238,238,1);" />
<div id="countdown" style="font-size: 40px; font-weight: bold;"></div>

最佳答案

每当你给用户积分时,在数据库中设置一个列作为“最后收到的积分”。只需将其保存为时间戳或日期时间。然后,当使用积分更新时,只有当他们最后一次收到积分超过 30 分钟时才更新 :D 没有用户可以作弊并获得超过可能的积分。

关于php - 如何防止多页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33529489/

相关文章:

javascript - 使随机图像出现在 Bootstrap 主题中的代码编辑器

php - 在 PHP 中循环执行 MySQL 查询

mysql - 有没有办法将 sha256 转换为 md5 哈希

mysql - 如果 if 语句为真,如何在 if 语句后关闭 mysql 连接?

php - Laravel 验证 - 禁止请求参数的规则

php - 在 Modular Codeigniter 中,一个模块的 Controller 如何/应该如何调用另一个模块的函数?

php - TCPDF:PHPMailer 附件为空

php - 使用路径文件夹回显数据库中的图像,

javascript - 如何在 WordPress 中的关闭/body 标签后添加 Javascript

html - 如何取消html文件上传?