Форум 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=138297)

KVinS 03.04.2010 22:14

Flash и php прием и отправка одновременно
 
Здраввствуйте вот в чём у меня суть кода:
Я из флеша отправляю переменные в пхп
Там они обрабатываются, создаются новые переменные
И вот как мне их тут-же принять?
Ведь если сделать новый запрос пхп обнулится

mooncar 03.04.2010 22:17

Смотрите метод sendAndLoad класса LoadVars - это то, что вам нужно.
Откройте для него хелп, посмотрите его аргументы и пример использования.

KVinS 03.04.2010 22:43

Это я знаю
Я не смог всё это "собрать"

mooncar 03.04.2010 23:02

А в чем сложность-то?
Создаете два экземпляра LoadVars.
Формируете переменные для передачи скрипту и назначаете их первому экземпляру.
Вызываете из первого экземпляра LoadVars скрипт (указывая для получения экземпляр-получатель и метод - GET или POST).
Для экземпляра-получателя записываете функцию onLoad для разбора полученных переменных.
Скрипт должен отдавать строку вида var1=value1&var2=value2...

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

Elidan 03.04.2010 23:03

Отправляем запрос из flash
Код AS1/AS2:

mov_data.loadVariables("script.php", "POST")

в пхп пишешь:
PHP код:

echo "переменная1=значение1&переменная2=значение2&переменнаяN=значениеN"

далее выводим полученные данные в flash output
Код AS1/AS2:

mov_data.onData = function(){
    trace(mov_data.переменная1);
    trace(mov_data.переменная2);
    trace(mov_data.переменнаяN);
}


mooncar 03.04.2010 23:07

Не учите плохому - loadVariables не надо использовать, это устаревший метод.
К тому же loadVariables не имеет событий, которые можно обработать. Поэтому и ввели LoadVars с возможностью отслеживания получения данных - onLoad или onData.

KVinS 03.04.2010 23:24

Код AS1/AS2:

var a1 = new LoadVars();
        var a1 = 1;
        var a1 = new LoadVars();
        var otvet2 = new LoadVars();
        a1.sendAndLoad("http://test1.ru/news.php",otvet2,"POST");
        otvet2 = otvet2;

А дальше?

mooncar 03.04.2010 23:24

Флеш:
Код AS1/AS2:

var send_lv:LoadVars = new LoadVars();
send_lv.testVar  = 'Это тест';
 
var result_lv:LoadVars = new LoadVars();
 
result_lv.onLoad = function(success:Boolean) {
        if (success) {
                trace(this.testReply); //this ссылается на result_lv
        }
};
 
send_lv.sendAndLoad('http://site.ru/test.php', result_lv, 'POST');

Скрипт test.php:
PHP код:

<?php
$testVar 
$_POST['testVar'];
$testReply 'Отклик:'.$testVar;
echo 
'testReply='.$testReply;
?>

Судя по вашему коду в посте 7, вы не очень понимаете сути.
Создается экземпляр LoadVars и ему придаются переменные (переменные и их значения).
При использовании метода sendAndLoad эти переменные передаются скрипту.
Скрипт получает их и извлекает из запроса POST.
И в обратном порядке....

Скрипт отрабатывается и выводит строку, флеш получает от него эти пары "переменная=значение".
Эти пары разбираются в функции-обработчике onLoad второго экземпляра.

KVinS 03.04.2010 23:25

ответили пока писал
кстати лоадвариблес я тоже думал, но там же все переменные

mooncar 03.04.2010 23:36

Для нескольких:
Код AS1/AS2:

var send_lv:LoadVars = new LoadVars();
send_lv.testVar1  = 'Это тест1';
send_lv.testVar2 = 'Это тест2';
 
var result_lv:LoadVars = new LoadVars();
 
result_lv.onLoad = function(success:Boolean) {
        if (success) {
                trace(this.testReply1); //this ссылается на result_lv
                trace(this.testReply2);
                trace(this.newVar);
        }
};
 
send_lv.sendAndLoad('http://site.ru/test.php', result_lv, 'POST');

PHP код:

<?php 
$testVar1 
$_POST['testVar1']; 
$testVar2 $_POST['testVar2']; 
$testReply1 'Отклик:'.$testVar1
$testReply2 'Отклик:'.$testVar3
$newVar 'Новая переменная';
echo 
'testReply1='.$testReply.'&testReply2='.$testReply2.'&newVar='.$newVar 
?>


KVinS 03.04.2010 23:39

что то я запутался
Кстати, помоему в 1 пхп ошибка?

mooncar 03.04.2010 23:40

Какая именно? Скобки? См. обновленный вариант.
И что вам не понятно?

KVinS 03.04.2010 23:47

Разве не должны быть типа echo "&r1=".$r1."&"; (я про знак флеша)
В пхп даже если поставить System.useCodepage = true; (для кириллицы)
Вернет: "
undefined
Отклик:
Новая переменная"

mooncar 03.04.2010 23:58

PHP код:

<?php  
$testVar1 
$_POST['testVar1'];  
$testVar2 $_POST['testVar2'];  
$testReply1 'Отклик:'.$testVar1;  
$testReply2 'Отклик:'.$testVar2;  
$newVar 'Новая переменная'
echo 
'testReply1='.$testReply1.'&testReply2='.$testReply2.'&newVar='.$newVar ;  
?>

Никаких
Код AS1/AS2:

System.useCodepage = true

, даже думать об этом не смейте..
сохраняете PHP скрипт в кодировке UTF-8!
Если редактируете PHP в Блокноте или еще где-то, там должна быть опция выбора кодировки.

KVinS 04.04.2010 00:03

Пфф уже сам нашёл )
Откуда там 3 то вылезла? )
А почему?
В код же придут testReply1, testReply2 и нью вар?
Динамик поле не ловит

mooncar 04.04.2010 00:06

Влезла 3... причина очень проста, я опечатался. :)
См. пример. Только URL хостинга исправьте.

KVinS 04.04.2010 00:12

Я в этом вроде разобрался
Принял текст русский
Но в какую переменную
Динамическое поле не ловит testReply1

mooncar 04.04.2010 00:15

Какое динамическое поле? Где оно? Ваш пример не видно, в моем полей никаких нет.

KVinS 04.04.2010 00:22

Ну я про текст
Отклик:aaa
Отклик:bbb
(у меня)
Они же должны прийти в testReply1, testReply2
?

mooncar 04.04.2010 00:24

И что, не приходят? Трэйс что выводит?
Вы мой последний пример смотрели, использовали?
Опять-таки, о каких полях вы говорите? Пока только о переменных и их значениях речь шла.

mooncar 04.04.2010 00:29

Возможно, вы криво используете динамические поля.
Вот пример с текстовыми полями.
Их имена на сцене text1... text3
Для них нужно использовать внедренный шрифт.
Над сценой есть техническое поле, в него внедрен шрифт (кнопочкой Embed) для дальнейшего использования.
В коде для 3-х "рабочих" полей использование внедренного шрифта объявляется (embedFonts = true).

PS. Не вздумайте использовать поле Var для вывода текстовых данных в поле.
Задается свойство text именованного текстового поля.
Если будут дальнейшие вопросы по работе с динамическими полями, создавайте новую тему, так будет правильнее.
Еще лучше - почитайте сперва что-то цельное, типа учебника, уроков или хелпа, где есть развернутый материал.

KVinS 04.04.2010 00:34

Трейс это служебный тест?
"Отклик:aaa
Отклик:bbb
Новая переменная"
создал текстовое поле задал ему переменную testReply1
Тишина
Создал новую кнопку (муви клип конечн, а не буттон), текстовое поле задал ему имя (ааа)
Повесил на него aaa.text = testReply1
Тож пустоОпять пока писал ответили

Про текстовые поля знаю ещё с прошлой темы
Когда получал все данные текста в юрл адрес )

mooncar 04.04.2010 00:37

Сейчас у вас скорее всего проблема с невнедренными шрифтами или путями.
См. пример в предыдущем посте.

KVinS 04.04.2010 00:38

Ошибка открытия
Использую кс4

Добавлено через 1 минуту
Ой, если повесить aaa.text = testReply1
то будет undefined
так что загадка
как же зовут принятые перемнные?

mooncar 04.04.2010 00:43

В общем, смотрите пример.

mooncar 04.04.2010 00:47

Не забывайте еще, что testReply1 и прочие принадлежат экземпляру result_lv. Т.е путь к ним result_lv.testReply1 (или проще - this.testReply1, если код используется внутри его обработчика ), и использовать их можно только изнутри функции onLoad, именно тогда они становятся определены.

KVinS 04.04.2010 00:55

Спасибо наконецто разобрался терь ещё внедрить в свою прогу...
Я сглупил и на автомате прописывал testReply1.result_lv

mooncar 04.04.2010 01:00

Ну вот и хорошо. Удачи!

KVinS 04.04.2010 01:32

Спасибо, всё работает
Правда не сразу заработало, но после того как я заменил формат файла с txt на php всё ок )

an_games 14.04.2010 00:33

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

mooncar 14.04.2010 01:04

Класс LoadVars делает эту работу за вас, если знак разделения &
Например, строка в файле
Код:

var1=value1&var2=value2
.
Тогда внутри onLoad просто обращайтесь
Код AS1/AS2:

lv.onLoad = function(suc:Boolean) {
  if (suc) {
  var1_loc = this.var1;
  var2_loc = this.var2;
 
  trace(var1_loc) //выведет value1
  trace(var2_loc) //выведет value2
  }
};

Если много данных, можно массивы использовать при разборе...

an_games 14.04.2010 07:20

ок, спасибо.
к стати, а есть ли примеры ММО с использованием только php сервера? ведь php работает , вроде, по принципу запрос/ответ, что не очень удобно или я ошибаюсь.
сори за ламерские вопросы)

xSx 12.04.2011 19:26

А как сделать что бы эти переменный отправлялись(брались) из MySQL?

mooncar 12.04.2011 19:37

Цитата:

Сообщение от an_games (Сообщение 900369)
ребят, а как разбить во флеше полученный таким образом блок переменных-несколько переменных посланных одной строчкой, отделенных друг от друга неким символом?

Пример приведите. А еще лучше создайте новую тему и задайте вопрос развернуто.

xSx 12.04.2011 20:02

Mooncar а подскажите пожалуйста, если обычный счетчик +1(кнопочка) и динамическое поле sv,
что у меня не так?
Код AS1/AS2:

on(release){
        gotoAndStop(2)
        sf = Number(sv)
        trace(sf)
var send_lv:LoadVars = new LoadVars();
send_lv.testVar1 = tm
send_lv.testVar2 = sf + 1;
 
var result_lv:LoadVars = new LoadVars();
 
result_lv.onLoad = function(success:Boolean) {
        if (success) {
                tm = this.testReply1
                sv = this.testReply2
                }
};
send_lv.sendAndLoad('http://site.ru/test.php', result_lv, 'POST');


mooncar 12.04.2011 20:32

Для начала: пишите код не на объекте, а в кадре.
Для того, чтобы обратиться к тексту текстового поля, нужно обратиться е его свойству text:
Код AS1/AS2:

sv.text = ....

Трейсите для проверки то, что получаете, если есть проблемы:
Код AS1/AS2:

if (success) 
{
  trace(this.testReply1);
 ...
}


xSx 12.04.2011 20:37

у меня не текст, а цифры.
Код AS1/AS2:

sv.Number

так тогда?
Извиняюсь понял. Тут всё для текста сделано, а я к числовым применяю.

mooncar 12.04.2011 20:49

Нет. Не надо предполагать и изобретать.
Для доступа к содержанию текстового поля используется свойство text, а его тип всегда строчный (String).
Если вам нужно забрать что-то из текстового поля и преобразовать это значение в число, чтобы потом можно было использовать в вычислениях, используются функции Number(text_field.text), или parseFloat, parseInt.
Если же вам только выводить что-то, ничего не предпринимайте.

xSx 12.04.2011 21:05

Я разобрался спасиб )
Код AS1/AS2:

on(release){
        gotoAndStop(2)
 
var send_lv:LoadVars = new LoadVars();
 
send_lv.testVar2 = Number(sv) + 1;
 
var result_lv:LoadVars = new LoadVars();
 
result_lv.onLoad = function(success:Boolean) {
        if (success) {
                sv = this.testReply2
                trace(this.testReply2)
                }
};
send_lv.sendAndLoad('http://site.ru/test.php', result_lv, 'POST');
}

Теперь пойду читать как это ещё в базу данных запихать :)


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

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