PDA

Просмотр полной версии : обмен данными между флэшем и Php.


Bright
13.06.2005, 07:51
Здравствуйте. Объясните пожалуйста как в PHP считать переменные из swf? Например, это может понадобиться для простейшей гостевой книги. Есть страница с флэшкой и php скриптом. Флэшка выполняет функцию просмотра и место куда вводить текст. Например юзерво флэшке заполнил поля text и name, нажал кнопку отправить. По нажатию этой кнопки значения переменных text и name передаются php, php их сохраняет, допустим в текстовик на сервере, флэшка тем временем переходить на другой кадр с просмотром сообщений (загружает текстовик.) То есть флэш здесь всего лишь оболочка, по сути, ненужная, но с помощью неё можно сделать КРАСИВУЮ гостевую книгу. В общем, расскажите как передать данные из флэша php, а как сделать чтобы php это всё сохранил, а флэшка потом считала файл я думаю, смогу.
Заранее спасибо.

50%LameRa
13.06.2005, 13:19
Посмотри в help-e sendAndLoad(). Ее как раз для таких целей используют. Flash отправляет запрос php, причем php не открывается в новой странице его выполнения вообще не заметно, php обрабатывает отправленные данные и отправляет флешке которая в это время ждет этих самых данныйх. Вот и все. ;)

DmitryMV
13.06.2005, 13:24
Например пользователь вводит текст в поле userPostTxtField. Тогда чтобы передать РНР скрипту этот текст нужен следующий код:
var guestBook:LoadVars=new LoadVars();//Создаём объект guestBook
//класса LoadVars, который занимается общением с серверными
//скриптами
guestBook.userPost=userPostTxtField.text// Создаём новое свойство
//объекта guestBook хранящее значение текстого поля userPostTxtField
guestBook.send("yourPHPscript.php","POST");//Отправляем все свойства
//объекта guestBook РНР скрипту (в нашем случае только одно свойство userPost.

В РНР чтобы получить отправленное свойство userPost пишем:
$newVar=$_POST['userPost'];

Чтобы из РНР передать переменную Flash'y надо:
print "&var1=$var1&var2=$var2.....varN=$varN";

А во Флэш:
guestBook.load("yourPHPscript.php");
И тогда объект guestBook будет содержать свойства:
guestBook.var1;
guestBook.var2;
....;
....;
....;
guestBook.varN;

TERRORist
18.06.2005, 17:19
Please дайте ссылку на сырец, а то что-то не очень получается :confused:

Bright
18.06.2005, 23:37
а можно так: если из флэша в пхп то
getURL("php.php", _blank, "POST")
ну или вместо POST ствь GET
тогда переменные можно предавать так:
www.site.ru/php.php?переменная=значение
www.site.ru/php.swf?переменная=значение
это GET.
когда переменные отправляются POST'om их нет в строке адрес.
для передачи из php во флэш тебе надо знать html-тег <form> и <input>
из флэша в пхп - getURL

TERRORist
19.06.2005, 00:28
Да у меня вроде РНР неправильно настроен. В файл данные пишет(счетчик посетителей сделал), а из строки параметры читать не хочет!

т.е. простой скрипт

<?
echo "Привет, ";
echo $name
?>

пишет просто Привет, ессесно я прописал параметр в строке. ПОМОГИТЕ!

Constantine
20.06.2005, 15:36
ну, эта, а скриптик которым читаешь-то приведи...

TERRORist
20.06.2005, 17:19
Да какой еще скриптик? Флешовый?
Он и так-то не работает, без флеша, я ж написал простой скрипт, полностью.

в строке я пишу http://localhost/test.php?name=TERRORist

Constantine
20.06.2005, 17:23
А с какого перепуга у тебя будет имя-то выводить? Если сам ставил PHP, то register globals off, так:
<?php echo "Привет, ".$_POST["name"]; ?>
будет работать...

TERRORist
20.06.2005, 17:59
спасибо, буду разбираться...

Bright
21.06.2005, 07:39
воть пример примитивнейшей гостевой книги

это файл gbadd.html
здесь форма для добавления сообщения:

<html>
<head>
<title>Добавить сообщение</title>
</head>
<body>
<form action="gbwrite.php" method="post">
<b>Ник (максимум 20 символов):</b>
<input name="nick" type="text" size="20" value="" maxlength="20"><br>
<b>E-mail (максимум 30 символов):</b>
<input name="mail" type="text" size="20" value="" maxlength="30"><br>
<b>Ваш текст (максимум 300 символов):</b><br>
<textarea name="text" rows="10" cols="40" maxlength="300"></textarea><br>
<input type="submit" value="Отправить">
</form>
</body>
</html>

при нажатии на кнопку он открывает gbwrite.php
этот файл пишет юзерово сообщении в файл data.txt

<html>
<head>
<title>Запись нового сообщения.</title>
</head>
<body>
<?php
//проверка файла:
$data = "\n Ник: $nick \n E-mail: $mail \n Сообщение: $text \n";
$filename = "data.txt";
if (is_file($filename)){
print "Файл $filename есть и с ним всё в порядке!";
}
else{
print "Файла $filename нет или с ним что-то не то...";
}
//получаем размер файла:
//здесь трабла: размер возвращается тот, что до записи.
$fsize = filesize($filename);
print "<br>Размер файла (в байтах) $fsize";
if (empty($nick)) {
print "<br> Неправильный или пустой ник! Вернитесь на предыдущюю страницу и введите свой ник!";
}
else {
//открытие...
$fo = fopen($filename, "a+");
//пишем переменную $data:
fwrite($fo, $data);
//закрываем файл:
fclose($fo);
}
?>
</body>
</html>

и последний файл это gbview.php
смотрелка сообщений

<html>
<head>
<title>Просмотр сообщений.</title>
</head>
<body>
<?php
$data = "12345";
$filename = "data.txt";
if (is_file($filename)){
print "Файл $filename есть и с ним всё в порядке!";
}
else{
print "Файла $filename нет или с ним что-то не то...";
}
$fsize = filesize($filename);
print "<br>Размер файла (в байтах) $fsize";
$fo = fopen($filename, "a+");
$fr = fread($fo, $fsize);
//нейтрализуем html теги:
$fr = htmlspecialchars($fr);
print nl2br("\n Текст файла: \n $fr");
//print "<br>Текст файла: <br> $fr";
fclose($fo);
?>
</body>
</html>

вот и всё.
всякую ненужную байду типа коментариев и сообщений "файл существует и его размер в байтах:" можешь смело снести...
правда какое отношении это имеет к флэшу? :rolleyes: здесь всё на пхп...

50%LameRa
21.06.2005, 15:56
<?php echo "Привет, ".$_POST["name"]; ?>
будет работать...
Ну в его случае вообще-то <?php echo "Привет, ".$_GET["name"]; ?>

Constantine
21.06.2005, 16:08
Ну в его случае вообще-то <?php echo "Привет, ".$_GET["name"]; ?>
Точно подмечено ;)

TERRORist
21.06.2005, 19:22
спасибо-спасибо. и извените что вас донимаю. просто уже все позабыл из рнр.

Leaf.fla
24.06.2005, 12:37
в общем у меня примерно такая же проблемма. работате почти но не полностью.
влеш форма не получает данные из ПХП скрипта.
в клипе - кнопка "post" и поле ввода текст с переменной "input". на кнопке скрипт -
on (release, keyPress "<Enter>") {
getURL ("http://localhost/index.php", "_root", "POST");
}
ну а в главном фрейме есть окно для вывода текста с переменной "output". "_root" указали место куда загрузиться результат(переменные от скрипта ПХП). при выполнении открыавется новое окно в браузере и браузер выводит результат работы полученный от флеш. а там где я на самом деле жду данные от ПХП, их нет.
ПХП скрипт -
<?
echo "$input";
?>

PS а мне нада что бы, я мог отправить ПХП переменные, и что бы ПХП значение этих же переменных мне вернул во Флеш обратно, а не в браузере.

Constantine
24.06.2005, 12:58
Ещё раз для тех, кто в танке:
Если в php.ini есть такая запись register_globals = Off данные из форм не помещаются в соответствующие глобальные переменные, другими словами, в этом случае твоя переменная $input не определена, а вот так <?php
$input=$_POST['input'];
echo $input;
?> вполне возможно, какое-то значение получишь, если нет других ошибок...
ЗЫ, а ковычки зачем в echo?

Leaf.fla
24.06.2005, 13:30
Constantine у меня register_globals = On
я же говорю что в Браузере значения этих переменнойвыводяться а Флеш их не принимает от Скрипта.

Constantine
24.06.2005, 13:49
Хорошо, а ты их передаешь в флэш, и как?

Leaf.fla
24.06.2005, 13:55
on (release, keyPress "<Enter>") {
getURL ("http://localhost/index.php", "_root", "POST");
}
по идее в книге написано что "_root", это главный фрейм в переменные которого будут отправлятся результат. я пробывал и точно из книги брать пример с использованием loadVariables() вместо getURL, хотя они похожи... но тем не менее, даже с loadVariables() не фига не получается. флеш форма не получеат резульат от пхп, вместо этого отрывается окно браузера и там выводиться этот результат.

Constantine
24.06.2005, 14:09
Да не из флэша, а во флэш , типа того... <param name="movie" value="index.swf?index=<?=$index?>" /> тада во флэше у тебя появится переменная _root.index
А ты что делаешь?

nagash
24.06.2005, 17:12
читать про LoadVariables во флеше
пхп должен выводить строку по типу
var1=val1&var2=val2&...&varN=valN

Leaf.fla
24.06.2005, 18:27
я же привел пример как я вывожу. есть скрипт к которому флеш обращается - index.php. полное его содержание скрипта - <? echo "$input"; ?>
я так и думал что там че то мудрить нада с этими переменными на строне сервера, но я не пойму все же, что именно.
кто бы подсказал.

nagash
24.06.2005, 18:37
у тебя флеш не обращается, а посылает браузер на index.php
если ты будешь повнимательнее ты не будешь писать глупости...

Constantine
24.06.2005, 23:01
Я - джедай, и ты - джедай, ты мне мозги не емай!.. Типа того...
Нарисуй проблему в полном объёме, а то становится непонятно о чём мы говорим.

TERRORist
25.06.2005, 00:26
Проблема в голове. Leaf.fla, купи себе хорошую книгу. Или скачай.

Всем спасибо, все работает! Пока только наполовину, сделал гостевуху: пишет время/число и сам пост. Без всяких там форм, все только на флеш. Осталось смайлик и ник.
Но есть траблы: русский язык не хочет; как подгрузить gif динамически?

Constantine
25.06.2005, 00:32
Старик, в раздел "flash", там всё есть, ей-бо, помилосердствуй - пятница всё же! :)

Leaf.fla
25.06.2005, 13:06
знаете как работает html форма ? она отправляет данные, и данные приходят.
так вот, вместо html формы должна быть форма Flash.
пишу я нормально. без глупостей. как описывают функцию так я ей и пользуюсь. почитай сам и поймешь.

poison_uz
25.06.2005, 23:24
Ребята, тут у меня такой вопрос: php берет даные (кирилицу) из mySql для передачи во флешку, передает а выходит !"№%;, да правильно кодировка! А как мне заставить PHP выводить в формате unicod?

50%LameRa
26.06.2005, 00:44
Во первых
on (release, keyPress "<Enter>") {
getURL ("http://localhost/index.php", "_root", "POST");
}
ты всего лишь видишь результат работы скрипта index.php в окне браузера,
говоря проще открывешь новую страницу(передав ей параметры) а на ней flash-ем который был на предыдущей странице и не пахнет его опять окрывать надо, только добавив, то что Constantine сказал <param name="movie" value="index.swf?index=<?=$index?>" />, во вторых flash ничего не будет принимать пока ты сам ему этого не скажешь, это то что nagash сказал читать про LoadVariables,
в третьих я думаю тебе поможет sendAndLoad().

50%LameRa
26.06.2005, 00:57
2poison_uz: "utf8_encode -- encodes an ISO-8859-1 string to UTF-8"

Crazy
26.06.2005, 01:14
2poison_uz: "utf8_encode -- encodes an ISO-8859-1 string to UTF-8"

Очень смешно. Друг мой, ты хоть примерно представляешь себе, что такое ISO-8859-1 и чем оно отличается от ISO-8859-5 и windows-1251? :D

TERRORist
26.06.2005, 16:28
Все работает, только пока без смайликов!) Всем спасибо! :D
гостевуха имеет вид Дата/Ник\Сообщение
Только маа-а-аленькая трабла:

открываешь через файловую систему файл, допустим, "D:/www/guestbook.html" с флешкой, тогда данные грузятся(но ессесно не отсылаются).

открываешь "http://localhost/guestbook.html", тогда наоборот, таблица загруженных постов пуста, но флешка сохраняет в файл новые посты.

Где подвох? (конечно кэш я обнулял)

50%LameRa
27.06.2005, 15:43
Друг мой, ты хоть примерно представляешь себе, что такое ISO-8859-1 и чем оно отличается от ISO-8859-5 и windows-1251?
Увы нет, друг мой, всего лишь нашел в хелпе, но если объяснишь буду очень признателен :p

Crazy
27.06.2005, 16:06
объясняю: в Iso-8859-1 нет русских букв. вообще. соответственно, совет использовать эту функцию... как бы помягче... не применим на практике.

TERRORist
27.06.2005, 16:59
а я!? а мне? Heeeelp!
помоги мне мой маленький дружок!

poison_uz
27.06.2005, 18:58
2 50%LameRa
Я немного не понял про что это? Если не влом плиз подробнее???

50%LameRa
27.06.2005, 20:47
Я немного не понял про что это? Если не влом плиз подробнее???
Сегодня 15:59
Crazy(которого благодарю за мягкость :)) убедил меня в бесполезности моего совета, вобщем не обращаяй внимания, я сглупил :(

TERRORist
27.06.2005, 21:16
HELP ME!
Все работает, только пока без смайликов!) Всем спасибо! :D
гостевуха имеет вид Дата/Ник\Сообщение
Только маа-а-аленькая трабла:

открываешь через файловую систему файл, допустим, "D:/www/guestbook.html" с флешкой, тогда данные грузятся(но ессесно не отсылаются).

открываешь "http://localhost/guestbook.html", тогда наоборот, таблица загруженных постов пуста, но флешка сохраняет в файл новые посты.

Где подвох? (конечно кэш я обнулял)
HELP ME!

-MS-
27.06.2005, 22:52
2 50%LameRa
Я немного не понял про что это? Если не влом плиз подробнее???
функция в php iconv помоему, перевод одной кодировки в другую
синтаксис:
iconv ( string in_charset, string out_charset, string str )
пример:
iconv("ISO-8859-1", "UTF-8", "This is a test.")

CoR-Pi
26.10.2005, 00:40
а из какой в какую?...
у меня есть БД (mysql) и доставая оттуда текст, во флеше его просто не видно... англицкий видно ;)... вот интересно - судю по всему конвертить надо в винд-1251 а из какой кодировки???

Skubent
26.10.2005, 11:37
Кириллицу в юникод - это не utf8_encode, а iconv() делает.
В общем, флэш нормально кушает данные вида
"var1=".urlencode(iconv('cp1251', 'UTF-8', 'Вася'))."&va2=12"

macik
28.01.2006, 15:33
Вижу, что тема писалась давно, но может, кто ответит.
Есть база в ней кодировка win1251, php берет данные из базы и делает текстовые файл с кодировкой win1251.
Flash берет данные из файла ну и естественно он русский не видит. Можно как-то сохранить файл в UTF 8 или заставить Flash win1251 читать?
---------------------

Ответ найден, им оказалась "System.useCodepage = true;"
И все теперь видно ....