如何通过URL将参数从Flex HttpService发送到PHP

如何通过URL将参数从Flex HttpService发送到PHP,php,apache-flex,flex4,flash-builder,httpservice,Php,Apache Flex,Flex4,Flash Builder,Httpservice,请原谅我,如果这个问题已经得到了回答/非常基本/这个问题的措辞不正确,我对这个问题非常陌生,而且很挣扎 基本上,我有一个后端PHP,它生成XML,然后FlashBuilder继承数据。我陷入困境的地方是理解flashbuilder如何通过HttpService向PHP发送参数,例如 这是它目前的解释: http://..../file.php?action=getitems 我希望flash builder发送的是 &class=fruit (<- the class would

请原谅我,如果这个问题已经得到了回答/非常基本/这个问题的措辞不正确,我对这个问题非常陌生,而且很挣扎

基本上,我有一个后端PHP,它生成XML,然后FlashBuilder继承数据。我陷入困境的地方是理解flashbuilder如何通过HttpService向PHP发送参数,例如

这是它目前的解释:

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)

谢谢你,如果这是胡说八道,我道歉。我使用的是Flash Builder 4。

总的来说,我会使用push方法,而不是传递一个变量,以减少从中间被黑客攻击的机会

http调用的我的AS3代码:

    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);
    }
公共函数someRequest():void
{
var服务:HTTPService=newhttpservice();
service.url=”http://localhost/getData.php";
service.useProxy=false;
service.method=“POST”;
service.contentType=“application/xml”;//传递xml数据。
service.request=“somevalue”;//XML数据。
service.resultFormat=“xml”//接收xml数据。
service.addEventListener(ResultEvent.RESULT,createFields);
service.addEventListener(FaultEvent.FAULT,handleFault);
service.send();
}
私有函数createFields(事件:ResultEvent):void
{
var result:String=event.result.toString();
returnData=XML(结果);
}
私有函数handleFault(事件:FaultEvent):无效
{
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)
?>

这在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);

。。。完成了

我通常通过[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更安全,尽管它仍然可以到达。

只是一个注释,或者我是瞎子,我找不到PHP示例中传递数据的位置/方式。我在用于向AS3传递XML数据和从AS3传递XML数据的三行代码中添加了注释。它们是.contentType、.request和.resultFormat行。我发现使用XML很容易,因为mySQL可以干净地使用它,但是您可以更改这些行中的描述符以使用您选择的数据格式。如果您要提供示例代码,它可能会解释答案?很抱歉,我打开了两个窗口,并从错误的窗口复制了PHP。我已经在上面更正了它。您可以通过$_POST[xml_var]使用传递的变量,这样您的URL中就不需要这些变量了;“在我发布之前,应该已经阅读了所有的答案。Sam DeHaan击败我找到了正确的答案,尽管我非常确定你需要obj.paramater vice他的obj['paramater']。就我所知,他的方法可能也很有效。从未尝试过。”你的方法在大多数情况下都应该有效。我很担心使用“class”,因为它是一个关键词,所以我想我更愿意安全地按照我展示的方式来做。
<s:HTTPService id='myService' url='urlToYourPHP' method='POST' result='yourResultHandler' fault='yourFaultHandler' resultFormat='XML'/>