2016-09-08 6 views
0

Я работаю над онлайн-игрой в Flash AS3 и использую PHP-сервер с базой данных mySQL. Я манипулирую данные в базе данных mySQL с помощью PHP, и когда я запрашиваю PHP-файл в браузере прямо с 'localhost/php/file.php', база данных изменяется отлично. У меня есть следующий код AS3:Загрузка PHP-URL во Flash 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' в веб-браузере изменений в базе данных, и мне интересно, в чем проблема.

+3

** ПРЕДУПРЕЖДЕНИЕ **: Если вы просто изучаете PHP, пожалуйста, не используйте интерфейс ['mysql_query'] (http://php.net/manual/en/function.mysql-query.php) , Это так ужасно и опасно, что он был удален в PHP 7. Замена, такая как [PDO, не трудно учиться] (http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps -pdo-for-database-access /) и руководство, подобное [PHP The Right Way] (http://www.phptherightway.com/), объясняет лучшие практики. – tadman

+0

Также использование 'exit()' для печати - это очень грязный способ сделать это. Обычно вы должны использовать 'echo', и пусть программа завершается нормально. – tadman

ответ

0

У вас проблема с кешированием. Другими словами, результат уже запрошенного URL-адреса кэшируется для уменьшения времени ожидания и времени доступа, и то, что вы представляете, является кэшированной копией вывода, а не свежей выводом, результатом выполнения инструкций от имени сервер.

Чтобы преодолеть эту проблему, вы могли бы нажать на заголовок no-cache на свой объект «запрос» (свойство имеет тип URLRequestHeader). Тем не менее, время выполнения выглядит невежественным в заголовке, и оно всегда обеспечивает кешированную копию!

Чтобы преодолеть эту проблему, однако, вы должны обмануть время выполнения, как если бы вы запрашиваете новый адрес каждый раз, добавляя фиктивную случайную многозначных переменную:

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


А что касается ваших конкретных условии код; URLLoader работает асинхронно, поэтому вы регистрируете «на полном» слушателе! Заявление t = check(t); побуждает вас пытаться «проверить» результат, пока он может быть не готов к тому времени! Вы должны проверить это, когда/после запуска слушателя. В дополнение к тому, что присваивание синтаксически неуместно (присваивание Function Boolean!) И пересмотреть логику функции check!

И в PHP-коде, как и другие, предположительно, не используйте устаревшую функцию mysql_query и используйте более подходящий API.

Смежные вопросы