我有一个执行动作的按钮,是否可以创建一个计时器,因此按钮只能每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页面?如果是的话,在哪里?
答案 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);
}