Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Ajax会等待函数完成,然后用户才能在服务器端再次调用它_Php_Ajax - Fatal编程技术网

PHP Ajax会等待函数完成,然后用户才能在服务器端再次调用它

PHP Ajax会等待函数完成,然后用户才能在服务器端再次调用它,php,ajax,Php,Ajax,我得到的是: 用户帐户上有100点积分。功能将从他的平衡中减去10分。然后,这10分将被另一个用户获得 问题是,如果用户将按钮垃圾邮件发送11次,那么另一个用户仍然会得到+10分,即使余额为0。这是因为函数一次执行多次 所以我基本上也有类似这个问题的问题,但我必须在服务器端处理它。 示例代码: function subtract() { $.ajax({ type: 'POST', url: 'verify.php', data: {

我得到的是:

用户帐户上有100点积分。功能将从他的平衡中减去10分。然后,这10分将被另一个用户获得

问题是,如果用户将按钮垃圾邮件发送11次,那么另一个用户仍然会得到+10分,即使余额为0。这是因为函数一次执行多次

所以我基本上也有类似这个问题的问题,但我必须在服务器端处理它。

示例代码:

function subtract() {
    $.ajax({
        type: 'POST',
        url: 'verify.php',
        data: {
            'token':token
        },
        complete: function(r) {
            var success = r.responseText;
        }
    });
}
verify.php

$getCurrentBalance; //Points from Database
$subtract = $getCurrentBalance - 10;

updateBalance(); //Update the users balance with subtracted Points

所以一切都很好,但是,如果在用户可以再次调用之前函数已经完成,我必须检查服务器端。

您可以认为它更像是一个注释,但我强烈指出,对于客户端解决方案的建议不应该是解决问题的好方法,因为客户端不能也不应该被信任。
解决此问题的一种方法是在交易进行时“锁定”帐户。锁可以由布尔值组成;例如,true表示解锁,false表示锁定。锁本身应该在数据库表中。通过编程,您可以使用css“停用”按钮。这样,您就可以涵盖外观和功能。

您可以发布
updateBalance()的内容吗?@david
$database->getReference('users/'.$uid./points')->set($subtract)该函数可以工作,但我必须找到一种方法防止用户多次调用它times@IncredibleHat我想到了,但这是客户端还是非客户端?为什么不在单击时禁用按钮,然后在ajax完成时再次启用if?您还可以在之前将验证放在sql中updating@Miggy这不也是客户端的吗?我的意思是,如果用户想通过控制台再次启用按钮,他可以?@难以置信你是认真的吗?在中,我非常清楚地表明,我需要它是服务器端的。