Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Связь PHP - AS 3.0 (http://www.flasher.ru/forum/showthread.php?t=146099)

DenverusIm 28.10.2010 22:03

Связь PHP - AS 3.0
 
Учусь программированию поэтому сразу прошу прощения за глупый вопрос
в общем пытаюсь передать данные из as 3.0 в PHP связываюсь с БД скачиваю таблицу
формирую файл на сервере и потом скачиваю его при помощи URLLoader. Всё работает, но мне не нравится тот факт, что я не знаю о времени окончания формирования файла, а как получить ответ от PHP не могу понять
Привожу код из AS
Код AS3:

public class Download extends Object
        {
                // 1 Переменные класса
                private var request:URLRequest = new URLRequest();// адреса запросов
                private var loader:URLLoader=new URLLoader();// загрузчик для файла
                private var timer:Timer = new Timer(100,1);// задержка между повторной закачкой файла в случае неудачи
                private var urlVariables:URLVariables=new URLVariables();// url-переменная
                private var errorCounter:int = 0;// счётчик неудачных загрузок файла
                private var arrayDataOfTable:Array=new Array();// конечный массив скачиваемых данных
                public static var arrayData:Array=new Array();// конечный массив скачиваемых данных
                // 2 Конструктор класса
                public function Download(urlRequest:String, urlDownload:String, nameTable:String)
                {
                        // формируем запрос к MySql для запуска серверного скрипта
                        request.method = URLRequestMethod.POST;
                        request.url=urlRequest;
                        // в качестве параметра для серверного скрипта передаём название скачиваемой таблицы
                        urlVariables.type = nameTable;
                        request.data = urlVariables;
                        // отсылаем запрос
                        sendToURL(request);
                        // формируем запрос для скачивания готового файла
                        request.url = urlDownload;
                        // даём серверу время на отработку
                        startDownload();
                        // и ставим слушателей событий на завершение закачки или ошибку скачивания
                        loader.addEventListener(Event.COMPLETE, compliteLoadListener);
                        loader.addEventListener(IOErrorEvent.IO_ERROR, errorLoadListener);
                }
                // 3  Закрытые методы  класса
                // 3.1 запускаем таймер на выдержку по окончании которой выполняем функцию загрузки файла
                private function startDownload()
                {
                        timer.start();
                        timer.addEventListener(TimerEvent.TIMER, downloadFile);
                }
                // 3.2 Запускаем процесс скачивания файла
                private function downloadFile(e:TimerEvent):void
                {
                        // в случае если скачивание было ошибочным менее 50 раз
                        if (errorCounter < 50)
                        {
                                // увеличиваем значение счётчика неудачных загрузок
                                errorCounter++;
                                // посылаем команду загрузки файла
                                loader.load(request);
                        }
                        else
                        {
                                // формируем действие клипа на отсутсвие связи с базой данных
                                trace("не получилось скачать файл");
                        }
                }
                // 3.3 функция обработки скачанных данных
                private function compliteLoadListener(e:Event)
                {
                        var string:String="";// строка для занисение в неё строки из скаченного файла
                        var array:Array=new Array();// промежуточный массив для занесения подстрок будущено массива
                        var i:int;
                        // полученные данные заносим в строку
                        string = loader.data;
                        // и осуществляем формирование массива разделяя строки разделителем "~~"
                        array = string.split("~~");
                        // в случае если последний элемнт полученного массива равен "endString"
                        if (array[array.length - 1] == "endString")
                        {
                                // удаляем последний элемент
                                array.pop();
                        }else{
                                // в противном случае формируем новую загрузку
                                startDownload();
                        }
                        // формируем двухмерный массов для помещения туда таблицы из БД
                        for (i=0; i<array.length; i++)
                        {
                                arrayDataOfTable[i]=new Array();
                                arrayDataOfTable[i] = array[i].split("~");
                        }
                        // заносим значение полученного массива в статическую переменную для возможности
                        // обращения к нему из других точек кода
                        arrayData=arrayDataOfTable;
                }
                // 3.4 функция обработки неудачной загрузки файла
                private function errorLoadListener(e:IOErrorEvent)
                {
                        // инициализируем новую закачку
                        startDownload();
                }
        }
}

Код PHP:
PHP код:

<?php
$typeRequest
=$_GET['type'];
echo 
'запрос от Flash о подключении к таблице: '.$typeRequest.'<BR>';
// подключаемся к базе данных для получения спмска login-password
$connection=mysql_connect("localhost","root","1205") or die ("No connect with MySql");
echo 
'установка соединения с MySql прошла успешно<br>';
$db=mysql_select_db ("data",$connection)or die ("No connect with BD");
echo 
'подключение к БД data была выполнена<br>';
// формирование запроса
$query="SELECT * FROM `$typeRequest`";
// отпрака запроса
$result=mysql_query($query);
echo 
"запрос в БД был отправлен".$result."<br>";
// проверяем наличие файла на сервере в случае присутствия удаляем его
if (file_exists ("login.txt")){
    
unlink ("login.txt");
    echo 
'файл удалён<br>';
}
// формируем строку с данными из таблицы столбцы разбиваем "~" строки "~~"
$string="";
while (
$row mysql_fetch_array($resultMYSQL_NUM)) {
    for (
$i=0$i<count($row); $i++){ 
        
$string.=$row[$i]."~";
    }
    
$string.='~';
}
// добавляем знак окончания строки
$string.="endString";
echo 
$string.'<br>';
// записываем полученную строку в файл
$handle fopen ("login.txt""w+b");
if (
fwrite($handle$string)==false){
        echo 
"ничё не записалось"."<br>";
    }else{
           echo 
"записался прикольный фаил смотри на диске"."<br>";
}
// закрываем фаил и обнуляем результат запроса к MySql
fclose ($handle);
mysql_free_result($result);
?>

буду очень благодарен всем кто просмотрит до конца и пояснит мне неучу
как получить сообщение от PHP о завершении его работы

alatar 28.10.2010 23:39

Зачем вам вообще реальный файл? Отдавайте строку
PHP код:

echo $string.'<br>' 

вот это и есть ваши данные отданные флешке, все остальное лишнее.
Вместо:
Код AS3:

// даём серверу время на отработку
startDownload();

Пишете:
Код AS3:

request.addEventListener(Event.COMPLETE, onComplete);
request.load();
...
private function onComplete(event:Event):void
{
  trace(URLLoader(event.target).data); //ваша строка
}


DenverusIm 29.10.2010 01:20

Жизнь прекрасна код выглядит немного по другому, но за идею просто огромное спасибо. Я над этой задачей биля месяц не мог ни где прочитать, а спрашивать стыдно блин.
Зато теперь всё станет совсем по другому
Ещё раз спасибо
Код AS3:

loader.addEventListener(Event.COMPLETE,onComplete);
loader.load(request);
...
private function onComplete(event:Event):void
{
  trace(URLLoader(event.target).data); //ваша строка
}



Часовой пояс GMT +4, время: 02:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.