2
我有一个网站给用户每个计时器1000分(30分钟)。 当用户点击按钮“开始计时器”时,计时器倒计时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分钟前”? – Eden
@Eden首先,在users表中添加一个'points_last_received'列。这应该是一个MySQL日期时间字段。然后,在你的UPDATE语句中,你需要将points_last_received设置为NOW()。这样,你就会知道用户何时最后得到了他们的分数。然后,在UPDATE语句之前,您需要首先为该ID执行SELECT语句,并让SELECT返回到points_last_received日期。如果points_last_received日期超过30分钟前(php比较),请执行UPDATE,否则返回错误,他们是骗子而不是执行UPDATE。 –
另外,欢迎来到SO!在您激励公共援助时考虑投票。 ; D –