Я работаю над онлайн-игрой в Flash AS3 и использую сервер PHP с базой данных mySQL. Я манипулирую данные в базе данных mySQL с помощью PHP, и когда я запрашиваю PHP-файл в браузере прямо из 'localhost/php/file.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'
к 'localhost/php/gameSearch.php'
в моем веб-браузере, база данных изменяется, и мне интересно, в чем проблема.
У вас проблема с кешированием. Другими словами, результат уже запрошенного URL-адреса кэшируется для уменьшения времени ожидания и времени доступа, и то, что вы представляете, это кэшированная копия вывода, а не свежий результат, полученный в результате выполнения инструкций от имени сервера ,
Чтобы преодолеть эту проблему, вы могли бы requestHeaders
заголовок no-cache
в свойство requestHeaders
на свой объект запроса (свойство имеет тип URLRequestHeader
). Тем не менее, время выполнения выглядит невежественным в заголовке, и оно всегда обеспечивает кешированную копию!
Однако для преодоления этой проблемы необходимо обмануть среду выполнения, как если бы вы запрашивали новый URL-адрес каждый раз, добавляя фиктивную переменную случайного значения:
getSite("localhost/php/file.php?r="+Math.random());
URLLoader
работает асинхронно, поэтому вы регистрируете «на полном» слушателе! t = check(t);
заявляет, что вы пытаетесь «проверить» результат, пока он может быть не готов к тому времени! Вы должны проверить это, когда / после запуска слушателя. В дополнение к тому, что присваивание является синтаксически неуместным (назначение Function
Boolean
!) И пересмотр логики функции check
!
И в PHP-коде, как предлагали другие, настоятельно не использовать устаревшую функцию mysql_query
и использовать более подходящий API.