Как отправить параметры через URL в PHP из Flex HttpService

Простите меня, если на этот вопрос уже был дан ответ/очень простой/вопрос сформулирован неправильно, я очень новичок в этом и борюсь.

По сути, у меня есть серверный PHP, который генерирует XML, а затем сборщик флэш-памяти наследует данные. Где я застрял, так это в понимании того, как сборщик флэш-памяти может отправить параметр в PHP через HttpService, например

Вот что он интерпретирует в настоящее время:

http://..../file.php?action=getitems

То, что я хотел бы, чтобы flash Builder отправил, это

&class=fruit (<- the class would be dependant on what is selected from the drop down in the application)

в целом создать эту строку

http://..../file.php?action=getitems&class=fruit

Спасибо и извините, если это бред. Я использую Flash Builder 4.


person Ollie Jones    schedule 25.04.2012    source источник


Ответы (3)


На самом деле это довольно просто во Flex...

var service : HTTPService = new HTTPService();
service.url = "http://localhost/getData.php";
service.method = "POST";


var parameters:Object = new Object();
parameters["action"] = "getitems";
parameters["class"] = "fruit";

service.send(parameters);

... Выполнено!

person Sam DeHaan    schedule 25.04.2012

В целом, я бы использовал метод push вместо передачи переменной, что уменьшает вероятность взлома из середины.

Мой код AS3 для http-вызова:

    public function someRequest() : void
    {
        var service : HTTPService = new HTTPService();
        service.url = "http://localhost/getData.php";
        service.useProxy = false;
        service.method = "POST";
        service.contentType = "application/xml";    // Pass XML data.
        service.request = "<ID>somevalue</ID>";     // The XML data.
        service.resultFormat = "xml";               // Recieve XML data.
        service.addEventListener(ResultEvent.RESULT, createFields);
        service.addEventListener(FaultEvent.FAULT, handleFault);
        service.send();
    }

    private function createFields(event : ResultEvent) : void
    {
        var result : String = event.result.toString();
        returnData = XML(result);
    }

    private function handleFault(event : FaultEvent) : void
    {
        var faultstring : String = event.fault.faultString;
        Alert.show(faultstring);
    }

Как вы видите ближе к середине, есть пространство XML для ввода переменной. Я использую этот подход для передачи данных туда и обратно из PHP в AS3.

PHP это:

<?php

define("DATABASE_SERVER", "localhost");
define("DATABASE_USERNAME", "root");
define("DATABASE_PASSWORD", "**");
define("DATABASE_NAME", "dbName");

//connect to the database.
$mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);

mysql_select_db(DATABASE_NAME);

$Query  = "SELECT * from data WHERE employeeID = '" . ($_POST['ID']) . "'";
$Result = mysql_query($Query);

$Return = "<data>";

while ($User = mysql_fetch_object($Result))
{
    $Return .= "<user><userid>" . $User->userid . "</userid><username>" . $User->username . "</username><emailaddress>" . $User->emailaddress . "</emailaddress></user>";
}
$Return .= "</data>";
mysql_free_result($Result);
print ($Return)
?>

Надеюсь, это поможет вам на вашем пути.

person powelljf3    schedule 25.04.2012
comment
Просто комментарий, либо я слепой, либо я не могу найти, где/как вы ссылаетесь на переданные данные в вашем примере PHP. - person Sam DeHaan; 25.04.2012
comment
Я добавил комментарии к трем строкам кода, которые используются для передачи XML-данных в AS3 и обратно. Это строки .contentType, .request и .resultFormat. Мне легко работать с XML, поскольку mySQL работает с ним чисто, но вы можете изменить дескрипторы в этих строках, чтобы они работали с форматом данных по вашему выбору. - person powelljf3; 26.04.2012
comment
Да, но в примере php не показано, как получить доступ к переданным данным. Если вы собираетесь предоставить пример кода, он, вероятно, должен объяснить ответ? - person Sam DeHaan; 26.04.2012
comment
Извините, у меня было открыто 2 окна, и я скопировал PHP не из того. Я исправил это выше. Вы используете переданные переменные через $_POST[xml_var], поэтому они не нужны в вашем URL. - person powelljf3; 26.04.2012

Обычно я обрабатываю это через [POST] вместо [GET]

В вашей функции actionscript:

private function sendRequest():void {
var obj:Object = new Object();
obj.action="getitems";
obj.class="fruit";

myService.send(obj);

Ваш httpService

<s:HTTPService id='myService' url='urlToYourPHP' method='POST' result='yourResultHandler' fault='yourFaultHandler' resultFormat='XML'/>

Как сказал powelljf3, POST более безопасен, чем GET, хотя его все еще можно получить.

person Dom    schedule 26.04.2012
comment
В мое редактирование добавлено следующее, но я должен добавить его и сюда; Должен был прочитать все ответы, прежде чем писать. Сэм ДеХаан Опередил меня, найдя правильный ответ, хотя я почти уверен, что вам нужен obj.paramater, а не его obj['paramater']. Насколько я знаю, его метод тоже может сработать. Никогда не пробовал. - person Dom; 26.04.2012
comment
Ваш должен работать в большинстве случаев. Меня беспокоило использование «класса», поскольку это ключевое слово, поэтому я решил, что лучше перестраховаться и сделать так, как я показал. - person Sam DeHaan; 26.04.2012