是否可以为按钮添加计时器?

时间:2014-09-20 10:55:46

标签: php mysql

我有一个执行动作的按钮,是否可以创建一个计时器,因此按钮只能每6小时左右使用一次?

需要针对每个特定用户,因此如果一个用户按下该按钮,则不会影响其他用户的冷却时间或按下该用户的能力。

这是表格

<html>
<body>
<form action="addgold.php">
<input type="submit" name="Add gold" value="Work" onclick="addgold()" />
</form>

以下是按钮执行时需要执行的操作

<?php error_reporting(E_ALL); ini_set('display_errors', 1); 
include("header.php");
include("connect.php");
if(isset($_SESSION['userlogin'])){
$username = $_SESSION['userlogin'];
$sql = "SELECT stats.id, stats.gold, users.id, users.username FROM stats, users WHERE users.username     = '$username' AND stats.id = users.id";
$retval = mysqli_query($con,$sql);

while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
{
echo "Gold :{$row['gold']}  <br> ".

     "--------------------------------<br>";
} 
$row = mysqli_fetch_row($retval); 
$result = $row[0]; 


echo "<a href=\"main.php\">Back to main page</a>";
}else{
?>

<?php
echo "fail";
}
?>

我在另一个Stackoverflow问题(这个网站上有所有内容)中找到了类似的答案,它说它只能在javascript中完成,这很好,除了我还没有关于javascript的线索! 他/她放了一些代码

window.setTimeout(function() {
document.forms['form_name'].submit();
}, 1000);

但我该把它放在哪里?进入我的php页面?如果是的话,在哪里?

5 个答案:

答案 0 :(得分:1)

按钮的工作方式非常重要。

1)仅供注册用户使用

将其保存到数据库。然后只需检查数据库时差。

2)适合所有人

如果它不必100%准确,您可以使用会话,或者您也可以将信息保存到数据库,然后检查差异。

答案 1 :(得分:1)

假设您的应用程序具有唯一标识每个用户的身份验证,您可以在数据库中创建一个表(或向用户表添加一列),该表存储用户上次按下按钮作为DATETIME类型的时间

然后,当请求页面时,您需要做的就是计算当前时间与数据库中存储的时间之间的差异。使用mysql:

SELECT HOUR(TIMEDIFF(NOW(),last_pressed)) AS time_passed FROM my_table

如果差异小于6小时,您只需删除或禁用该按钮即可。请注意,删除按钮是不够的,您还必须阻止服务器端的操作,因为经验丰富的用户可以通过浏览器的URL栏发送请求或使用curl而不使用按钮。

如果您没有正确的会话身份验证,则可以使用@ ploutch的解决方案,并保存IP地址而不是用户ID。这并不完美,因为发送到服务器的标头可能被客户端篡改。

答案 2 :(得分:1)

如果你把你的限制器放在javascript中,它将在客户端完成,这意味着如果用户知道编程,他将很容易绕过这种保护。

如果您真的想在点击之间强制实施时间限制,则应该在服务器端完成,但这意味着服务器必须能够识别客户端。通常做的是使用IP地址(即使它并不完美),你可以通过检查PHP中的$_SERVER['REMOTE_ADDR']变量来获得。

答案 3 :(得分:1)

如果你想强制遵守点击之间的时间限制,你肯定需要在php(服务器端)中使用$_SESSION[]来保存这些信息,并将信息保存到数据库中。

答案 4 :(得分:-1)

在javascript中尝试setTimeout功能

<input type="button" value="click" id="click" onclick="foo(this);"/>​

在javascript中

function foo(obj) {
    obj.disabled = true;
    setTimeout(function() {
        obj.disabled = false;
    }, 2000);
}​