gpt4 book ai didi

php - 在 Flash AS3 中加载 PHP URL

转载 作者:行者123 更新时间:2023-11-29 20:23:58 24 4
gpt4 key购买 nike

我正在 Flash AS3 中开发一个在线游戏,并使用带有 mySQL 数据库的 PHP 服务器。我正在使用 PHP 操作 mySQL 数据库中的数据,当我直接从 'localhost/php/file.php' 在浏览器中请求 PHP 文件时,数据库会发生完美的变化。我有以下 AS3 代码:

    public function getSite(string):Boolean{

var phpVars:URLVariables = new URLVariables();
var t:Boolean = false;


/*
we use the URLRequest method to get the address of our php file and attach the php vars.
*/

var urlRequest:URLRequest = new URLRequest(string);

/*
the POST method is used here so we can use php's $_POST function in order to recieve our php variables.
*/

urlRequest.method = URLRequestMethod.POST;

/*
this attaches our php variables to the url request
*/

urlRequest.data = phpVars;

/*
we use the URLLoader class to send the request URLVariables to the php file
*/

var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlLoader.addEventListener(Event.COMPLETE, check(t));
t = check(t);

/*
runs the function once the php file has spoken to flash
*/

/*
we send the request to the php file
*/

urlLoader.load(urlRequest)
return t;


}

function check(t:Boolean):Function{
return function (event:Event):Boolean{
trace(event.target.data.checkResult);
if(event.target.data.checkResult == "Good"){
t = true;
} else {
t = false;
}
return t;
}
}

现在,从这里开始,我的“trace”显示 URL 已加载,并且输出为“Good”,但是数据库值不会更改。这是 PHP 文件:

   <?php
/*
connect to our database
*/
include_once "connect.php";
$sql = "UPDATE accounts SET PlayersOnline = accounts.PlayersOnline + 1";
$query = mysql_query($sql) or exit("checkResult=Bad");
exit("checkResult=Good");
?>

当我在网络浏览器中访问'localhost/php/gameSearch.php'时,数据库发生了变化,我想知道问题是什么。

最佳答案

您遇到“缓存”问题。换句话说,已请求的 URL 的结果会被缓存,以减少延迟和访问时间,并且您所表示的是输出的缓存副本,而不是执行以下操作所产生的新鲜输出代表服务器的指令。

要解决此问题,您可以将 no-cache header 推送到“request”对象上的 requestHeaders 属性(该属性的类型为 URLRequestHeader ) 。然而,运行时看起来对 header 一无所知,它总是提供缓存的副本!

但是,为了克服这个问题,您需要欺骗运行时,就好像您每次都通过附加虚拟随机值变量来请求新的 URL:

getSite("localhost/php/file.php?r="+Math.random());

<小时/>以及您提供的具体代码; URLLoader 异步工作,这就是您注册“完成时”监听器的原因! t = check(t); 语句会导致您尝试“检查”结果,但那时结果可能还没有准备好!您应该在监听器触发时/之后检查它。除了赋值在语法上不合适(将 Function 分配给 Boolean!)这一事实之外,还要重新考虑 check 函数的逻辑!

正如其他人所建议的那样,在 PHP 代码中,最终不要使用已弃用的 mysql_query 函数并使用更合适的 API。

关于php - 在 Flash AS3 中加载 PHP URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39399633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com