在 Flash AS3 中加载 PHP URL

Posted

技术标签:

【中文标题】在 Flash AS3 中加载 PHP URL【英文标题】:Loading PHP URL in Flash AS3 【发布时间】:2017-01-16 21:35:36 【问题描述】:

我正在使用 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' 时,数据库发生了变化,我想知道问题出在哪里。

【问题讨论】:

警告:如果您只是学习 PHP,请不要使用mysql_query 接口。它是如此可怕和危险,以至于它在 PHP 7 中被删除。像 PDO is not hard to learn 这样的替代品和像 PHP The Right Way 这样的指南解释了最佳实践。 另外使用exit() 打印一些东西是一种非常混乱的方式。通常你应该使用echo 并让程序正常结束。 【参考方案1】:

您有“缓存”问题。换句话说,已经请求的 URL 的结果被缓存以减少延迟和访问时间,您所代表的是输出的缓存副本,而不是执行代表服务器的说明。

要解决此问题,您可以将 no-cache 标头推送到“请求”对象上的 requestHeaders 属性(该属性的类型为 URLRequestHeader)。但是,运行时似乎对标头一无所知,它总是提供缓存的副本!

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

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


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

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

【讨论】:

以上是关于在 Flash AS3 中加载 PHP URL的主要内容,如果未能解决你的问题,请参考以下文章

Actionscript 3 - 在我的 swf 中加载另一个 swf 时出现列表错误

无法在 Flash CS6 中加载 Admob ANE

如何在每个页面中加载 CodeIgniter 助手?

如何在 Flash AS3 中从 URL 获取/获取变量

Flash ActiveX:如何从内存或资源或流中加载电影?

As3 - 我需要在两个场景中加载 XML 文件吗?