Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   flash+php (http://www.flasher.ru/forum/showthread.php?t=125826)

apoptom 03.06.2009 00:29

flash+php
 
здраствуйте, меня интересует динамичная (тоесть быстрая) передача даных по интернету,

пробовал через тхт (флэшка(на локале) передает параметры в php(на сервере) а он записывает их в тхт, и другой флэшкой брал данные из этого тхт )- ооооочень медленно

посоветовали MySQL , но я нарвался на эту статтю
http://www.softboard.ru/index.php?showtopic=58928
и понял что это еще медленее
в этой статте, в третьем варианте использовали php файл для хранения данных?
как это возможно?

пробовал закидать флэшку на сервер, и обращаться к php - не получаеться
может изза того что используеться html-AC_RunActiveContent-swf

помогите а? может советом, мыслями на эту тему?

если я что не так написал- это я русский не знаю :)

mooncar 03.06.2009 03:55

Заканчивая работу над CMS-кой к флеш сайту, которая сделана также на флеше + PHP + MySQL, выражу свое мнение. Голые цифры данной статьи а скорее, просто размышлений, наблюдений автора топика) не имеют, на мой взгляд, серьезного отношения к преимуществам и удобством работы с MySQL. Почитайте, что пишет его оппонент по поводу того же быстродействия и масштабируемости функционала запросов. Добавлю от себя. Одно дело - писать в текстовый файл кучу строк, разделенных спецсимоволами, но потом придется строить сложную структуру парсеров для выборки и добавления/замены значений столбцов.
Также вижу трудности в совместной работе с подобной базой на основе текстовых файлов, недостаточно прозрачное назначение прав доступа в иерархии текстовых файлов и т.п. Технология БД же берет всю эту работу на себя.
Язык SQL запросов достаточно прост, логичен и имеет хорошую связь со специальными функциями PHP. Работа пользователя или пользовательского скрипта с БД на его основе - давно зарекомендовавшая себя технология.

Что касается ваших трудностей. Я, например публиковал свою CMS-флешку с использованием AC_FL_RunContent, <object>, и все работает прекрасно.

Обращайтесь к серверным скриптам методом load класса LoadVars или, если нужно получить от скрипта результат работы (либо данные в виде пар имя=значение, или просто сообщения об успешности выполнения скрипта), методом sendAndLoad.

Пример реализации.

Вот так я, например, обновляю данные конкретной записи в одной из SQL-таблиц:

Код AS1/AS2:

//Базовая функция обновления записи в таблице
//В качестве аргументов функции обновления ей из мувика с полями
//ввода и вывода передаются заполненные там же массивы с именами полей, старыми значениями полей,
///новыми значениями и идентификатор товара по базе
 
UPD5full = function(FildsName, FildsOldValue, FildsNewValue, id) {
UpdBef = 0;    //триггер обновления хотя бы одного поля
 
UPD5SendVars = new LoadVars()//контейнер для ОТПРАВЛЯЕМЫХ данных
 
//начинаем формировать запрос
UPD5SendVars.id = id;  //говорим скрипту, какой id товара
 
//формируем запрос, забивая только изменившиеся значение в контейнер:
for (f=1; f <= 22; f++) { //складываем запрос по полям и их значениям
          //проверяем, есть ли изменения в f-м поле и при этом - не пустая строка
        if(FildsNewValue[f] != FildsOldValue[f] && FildsNewValue[f] != "") {
        UPD5SendVars[FildsName[f]] = FildsNewValue[f];       
        UpdBef = 1;
        }
// а теперь проверяем: есть ли изменения в f-м поле и теперь пустая строка
// (стерли значение)
        if (FildsNewValue[f] != FildsOldValue[f] && FildsNewValue[f] == "") {
        UPD5SendVars[FildsName[f]] = "#empty#";
//здесь у меня по слову empty sql очистит запись в указанном поле
        UpdBef = 1;
        }
}
 
//если что-то менялось в полях, то будем проводить запрос
if (UpdBef == 1) {
  UPD5Vars = new LoadVars();    //контейнер для ПОЛУЧАЕМЫХ  данных
  UPD5Vars.onLoad = function(success:Boolean) {
 
//вызов функции, отвечающей за то, какие действия совершать в случае
//успешной связи со скриптом на сервере               
      ONLOAD_5level(success,'UPD5Vars',id);
 
};
 
 //НЕПОСРЕДСТВЕННО ЗАПРОС НА ОБНОВЛЕНИЕ ТОВАРОВ ПО ИДЕНТИФ-РУ
UPD5SendVars.sendAndLoad('http://www.домен.ru/админка/upd5full.php', UPD5Vars, "POST");
} //if
 
else { //если все по-старому осталось, и нет изменений в значениях полей, то
        adv(1); //показываем сообщение  "все по-старому"
      }
 
}; //UPD5full

А вот ф-я обработки результатов запроса с учетом того, что скрипт отдает флешке:
Код AS1/AS2:

//Функция - что делать в з-ти от тго, что меняли после запроса на обновление записи
//GoodLoad - (приходит переменная success), булево значение, true - загрузка удалась
 //Act  - из результатов выполнения скрипта приходит объект, получаемый после загрузки URL-а, который содержит отдаваемые скриптом переменные в строке
 //id - (приходит переменная id)  - идент-р товара в таблице SQL
 
function ONLOAD_5level(loadstatus, Act, id) { 
 
//проверка связи, если UPD5Vars.onLoad возвратила true,
//то и loadstatus будет true
 
          if (loadstatus) {       
                if (!_root[Act].sqlerror) { //проверка выполнения SQL-запроса
                      switch (Act) {              //что делаем с результатом  в  з-ти от Act
                          case 'UPD5Vars':        //экспресс-обновление в списке товаров
                      CAT5Updaeted(id);
                        break;
                          case 'UPD5typesVars'//обновление характеристик товаров
                      CAT5TypesUpdated(id);
                      break;                       
                      } //switch
                  } else {  //ошибка SQL
                      errorTF.text = _root[Act].sqlerror;
                                        }
              } else {  //ошибка: нет связи
                errorTF.text = errs['Нет связи с сервером или отсутствует обработчик'];
              }
};

И наконец, хвостик скрипта PHP, который докладывет о результатах, но не передает сами данные:

PHP код:

<?php
mysql_query
($query)  or die("sqlerror=".mysql_error()); 
if (!
mysql_error()) {
echo 
"rez=ok";
}
else {
echo 
"sqlerror=".mysql_error();
}
?>

Здесь вместо строки вида sqlerror="текст ошибки" могут быть и сами данные в виде: var1=var1_value&var2=var2_value
Эту строку получает флеш и эти переменные мы можем забрать в данном случае из UPD5Vars (из контейнера для получаемых данных)

Замечания:
1. Нужно учитывать, что если делаем запрос с помощью load, а не sendAndLoad, то метод GET нам недоступен, и нужно формировать строку пар переменных-значений обычным для GET способом:
Код AS1/AS2:

CAT5UpdatedVars.load('http://www.домен.ru/админка/cat5expupdated.php?id='+id+'&r='+Math.random());

Здесь "&r="+Math.random() - рандомная переменная в конце GET-строки - необходима, чтобы URL каждый раз изменялся, так как в отличие от HTTP-метода POST, отклик сервера при GET-запросе может и, если судить по практике, обычно кэшируется браузером и данные не передаются/не получаются.

2. И еще, чтобы при проверке
Код AS1/AS2:

CAT5UpdatedVars.onLoad = function(success:Boolean) {
//действия в случае удачной связи со скриптом
}

проверка выполнялась удачно, скрипт обязательно должен выводить хоть что-то ("rez=ОК" например), чтобы не было пустой строки.

3. Конечно, нужно помнить о безопасности - авторизация при запросе к серверному скрипту, безопасное их хранение на самом сервере, права доступа к БД на SQL.

В общем, вот так как-то. Естественно, мой пример далек до совершенства. Наверняка можно как-то выжать по-полной объектную модель, но в ООП я не силен. Общие принципы я постарался изложить и все это работает.
Флеш тут - только интерфейс пользователя и формирователь команд для PHP.

Может быть ну ее, админку на AS и с флешем? Хотя достоинства есть и тут, та же анимация и расширенная графика, представление данных - немаловажный фактор при работе GUI.
У меня, анпример, анимируются списки после добавления новой записи, еще есть разная анимация - процесс общения с сервером иллюстрируется анимацией, ну и по мелочи.
Будут вопросы, пишите.
И, кстати, русский тоже сильно помогает, не пренебрегайте им. :)


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

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