Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Прием данных из PHP (http://www.flasher.ru/forum/showthread.php?t=170802)

imena 02.11.2011 09:41

Прием данных из PHP
 
Всем привет!

Объясните пожалуйста, как отсортировать полученные данные из PHP.

Код AS3:

 
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
request.url = "http://127.0.0.1/php.php?"+Math.random();
request.method = URLRequestMethod.POST;
request.data = variables;
 
................................................................................
 
 
private function completeListener(e:Event):void {
                trace(loader.data.firstName);                       
                    trace(loader.data.lastName);                       
}

PHP код:


    $id
=$HTTP_POST_VARS[id];
    
$link = mysql_connect("localhost", "root","tttt") or die("Could not connect");
    if( !
$link ) die( mysql_error() );
    
    
mysql_select_db('sampdb', $link);
    
$res = mysql_query("select * from users;");
    if(!
$res)
    {
        echo 
"db is empty";
        
mysql_close($link);
        exit();
    }
    
    
$rows = mysql_num_rows($res);
    
    for(
$i = 0; $i < $rows; $i++)
    {
        
$row = mysql_fetch_array($res);
        echo 
"firstName=".$row['first_name']."&lastName=".$row['last_name'];
    }
    
    
mysql_close($link); 

В рез-те, флэш выдает следующее:

Ivan
IvanovfirstName=Petr,PetrovfirstName=Sidr,Sidorov

причем, сам PHP выдает эту инфу в виде:

firstName=Ivan&lastName=IvanovfirstName=Petr&lastName=PetrovfirstName=Sidr&lastName=Sidorov

Не могу понять, почему у меня во flash firstName показывается, а lastName - нет.

Denis_Pryanikov 02.11.2011 10:21

Из php во flash можно передавать строку, но не массив. Пробуйте формировать строковую переменную с разделителем (например | ), а во флеше эту строку разделять через split(). Например
PHP код:

$returnVars['blabla']="1|2|3|4";
$returnString = http_build_query($returnVars); 
echo 
$returnString; 

Код AS3:

...
var fromPhp = evt.target.data.blabla;
var arr : Array = fromPhp.split("|");


carrotoff 02.11.2011 10:35

Цитата:

Пробуйте формировать строковую переменную с разделителем (например | ), а во флеше эту строку разделять через split(). Например
Очень странный подход.
А зачем по вашему придумали JSON и XML?

Denis_Pryanikov 02.11.2011 10:41

Вы считаете, что он не имеет место быть?

Genzo 02.11.2011 10:44

А если потом потребуется еще делать вложения?

goodguy 02.11.2011 11:07

Цитата:

В рез-те, флэш выдает следующее:
У меня как-то раз было такое. Причина была в том, что у меня весь код php файла, который должет был отдавать данные, был написан не в одном теге <?php ?> а в двух, т.е.
Код AS3:

<?php 
 // тут код, который принимал запрос из флеша
?>
 
<?php
 // а тут, который отдавал данные
?>

В результате (выявил это через многие мучения )) оказалось, что данные приходили с добавлением каких-то левых символов. Грубо говоря вместо lastName приходило что-то типа
Код AS3:

.   ^ 0_ lastName

Причина так и осталась для меня загадкой. Может эклипс что-то мудрила с исходниками, может сервер тупил.
Поместил и код приемник и код отдающий данные в один блок, и проблема исчезла.

Цитата:

Из php во flash можно передавать строку, но не массив.
У автора строка и передается

imena 02.11.2011 11:12

#goodguy
У меня все в одном теге... powered by dreamveaver.
Черт... всю ночь сидел... как идиот... скоро Ctrl+Enter сломается

#Denis_Pryanikov
Попробую последовать вашему совету, НО... все же хочется какой-нибудь другой метод(если конечно он есть) типа крэкс-пэкс-фэкс и оп-ля... "а ручки то вот они"...

Когда я делаю запрос на определенные данные...например передаю ID и из базы РНР вытаскивает только одно значение фестнэйм и лайстнэйм...то все отлично... а вот когда селект олл... тогда вот и возникает такая петрушка...
Лан... буду дальше разбираться... потом отпишусь
Всем спасибо

carrotoff 02.11.2011 11:27

А почему нельзя сделать по-нормальному, например, как-нибудь вот так:

PHP код:

$arrResult = array();
$sql = "SELECT * FROM `users` ORDER BY userID DESC";

if(!
$q = mysql_query($sql)){
     
$arrResult['error'] = 1;
     
$arrResult['error_message'] = "Something wrong";
     echo 
json_encode($arrResult);
     return;
}

$arrResult['error'] = 0;
while(
$res = mysql_fetch_assoc($q)){
      
$arrResult[] = $res;
}

echo 
json_encode($arrResult); 

А в клиенте просто посмотреть что приходит:

Код AS3:

private function completeListener(e:Event):void {
    trace(loader.data);                       
}


imena 02.11.2011 11:55

Я про JSON узнал пару дней назад... у меня за месяц тут и AS и PHP и MeSQL...башка лопается уже )))... теперь вот JSON...

carrotoff 02.11.2011 12:39

Ну так лучше сразу пытаться делать по фэн шую, чем набивать себе шишки печальными методами.

goodguy 02.11.2011 15:12

JSON и учить то в принципе не нужно. Там все проще простого (если конечно не писать собственный парсер)

imena 02.11.2011 20:04

В общем... вроде разобрался с JSON на стороне сервера.
Отсылаю данные

PHP код:

//        echo $json->encode($Users);
        
$sJSONText = $json->encode($Users);
        
$value = $json->decode($sJSONText);
        
print_r($value); 

и... никак не пойму что делать с ними дальше во флэш. Поискал инфу.. и нашел следующие материалы...
1) http://help.adobe.com/ru_RU/as3/dev/...2a75d91da-8000

2) http://help.adobe.com/ru_RU/FlashPla...pt/3/JSON.html

пытаюсь выполнить код со строками из примера:

Код AS3:

var ba:ByteArray = new ByteArray(); 
trace(JSON.stringify(ba)); //"ByteArray"

орет об ошибке...
Полез в хелп... написано что верхний уровень... но там нет JSON...
Объясните нубу что к чему и как обработать данные во флэш

Добавлено через 23 часа 6 минут
блин, либо народ начал праздновать либо я совсем нубовский вопрос задал.

Ookami 03.11.2011 22:02

сам джейсон-то во влеше у Вас есть? =) Это ж не стандартные функции

PHP код:

$sJSONText = $json->encode($Users);
$value = $json->decode($sJSONText);
print_r($value) 

Вот этого вообще не понял. Зачем Вы сперва кодируете, а затем декодируете массив? Вы же в итоге передаете опять-таки массив а не строку джейсон.

Добавлено через 7 минут
Вот кусочек из моего проекта. Скрипт на сервере:
PHP код:

<?php
$connect 
= mysql_connect("localhost", "username", "password");
mysql_select_db("database_name", $connect) or die ('Connection Error : ' . mysql_error());

$sql = "SELECT t1.tid, t1.tilename, t2.speed, t2.bonus, t3.abils, t4.acts
    FROM tiles AS t1
    LEFT JOIN speed AS t2 ON t1.tid = t2.tid
    LEFT JOIN (
    SELECT tid, GROUP_CONCAT( abil ) AS abils
    FROM abilities
    GROUP BY tid
    ) AS t3 ON t1.tid = t3.tid
    LEFT JOIN (
    SELECT tid, GROUP_CONCAT( direction
    ORDER BY tid, direction ) AS dirs, GROUP_CONCAT( actions
    ORDER BY tid, direction ) AS acts
    FROM actions
    GROUP BY tid
    ) AS t4 ON t1.tid = t4.tid"
;
$result    = mysql_query($sql);
while (
$row = mysql_fetch_assoc($result)) {
    
$resarr[] = $row;
}

$result = json_encode($resarr);
echo 
$result;
?>

Фрагмент из класса Main:
Код AS3:

import vk.api.serialization.json.*;
...
function load_list() {
        var vars:URLVariables = new URLVariables;
        vars.rt = "list";
        php.script_path = server_tiles;
        php._POST(vars);
        php.addEventListener(PHPTransfer.COMPLЕTE, PHPComplete);
 
        function PHPComplete(e:Event):void {
                res = JSON.decode(php.getData());
                for (var i = 0; i < res.length; i++) {
                        TilesArray.push(new commonTiles(res[i]));
                }
        }
}


imena 03.11.2011 22:28

все-все..разоборался... просто тут отписался утром...а вечером пришел...и ни единого ответа.. поэтому новую тему забил...
В общем... разобрался что к чему )))..

Спасибо всем!!!

GBee 04.11.2011 13:51

Цитата:

Вот кусочек из моего проекта. Скрипт на сервере:
Если запрос ничего не вернет, то будет ошибка.


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

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