2011-05-20 46 views
4

我有一個問題,從Flash(AS2)傳遞數組變量到PHP。在動作腳本我有這樣從閃存傳遞數組到PHP

output["px1"] 
output["px2"] 
output["px3"] 

定義多個陣列,然後我用下面的代碼的變量傳遞到PHP文件

output.sendAndLoad("orders/print2cart.php",output,"POST"); 

我想知道如何從數據PHP中的數組。我試過使用$_POST['px1'],$_POST['output']['px1'], $_POST['output'],但我似乎無法獲得任何數據。任何想法,我可以改變以獲得理想的結果?

謝謝!

編輯:只是注意到,我輸出(output.username)中的其他變量之一也沒有被髮送到PHP,儘管它出現在閃存中。使用下面的代碼警告閃光燈,它確實顯示了所有的變量。getURL(「javascript:alert('Print Stamp:」+ output.PrintStamp +「User:」+ output.username「')」);

編輯:好像有一次我發送一個相當長的數組(或一個字符串)沒有其他字段與LoadVars變量相關聯發送。我google了它的限制,它說文本的限制是〜63000.仍然不知道如果這是問題

+0

'print_r'或'var_dump' $ _POST;如果數據完全通過,這應該告訴你它在哪裏。如果它不在那裏,請嘗試查看$ _GET,以防萬一它實際上沒有執行POST。 – 2011-05-20 07:17:15

+0

@El Yobo:試過$ _GET,但沒有得到任何價值 – Farax 2011-05-20 11:00:45

+0

你檢查了你的服務器日誌以確保Flash實際上正在發出HTTP請求嗎?您也可以使用HTTPFox Firefox擴展等工具或Fiddler之類的代理來查看請求流量並檢查內容。這應該讓你繼續前進。 – 2011-05-21 07:35:13

回答

1

由於沒有其他選擇,我經歷了很多的東西去最後得出結論認爲,大尺寸的陣列無法通過從AS2非常容易地傳遞給PHP之前。我的數組實際上是一個轉換爲像素的圖像,所以我所做的就是將數組分成兩部分,並將其發佈到PHP文件兩次而不是一次。另一種方法是先將數組分割併發布到文本文件中,然後直接從PHP中讀取該文本文件。

3

嘗試作爲一個字符串。

在flash中使用Array.join();併發送返回的值,然後在PHP中使用explode()將其轉換回數組。

var dataOut:LoadVars = new LoadVars(); 
var dataIn:LoadVars = new LoadVars(); 

dataOut.info = your_array.join("#"); 

vars.sendAndLoad("url", dataIn, "post"); 

dataIn.onLoad = function(go:Boolean):Void 
{ 
    if(go) 
    { 
     trace('success'); 
    } 
    else trace('connection failed'); 
} 

的PHP:

<?php 
    $str = $_POST["info"]; 
    $myarray = explode($str); 
?> 
+0

將代碼更改爲以下內容,但它不起作用: 'code' output.PrintStamp = PrintStamp; output.username = curUser; output.abc = output [「px100」]。join(「#」); output.sendAndLoad(「orders/print2cart.php」,輸出,「POST」);代碼 IN PHP -------------- $ File =「YourFile.txt」; $ Handle = fopen($ File,'w'); $ Data = sizeof($ _ POST ['abc']); fwrite($ Handle,$ Data); fclose($ Handle); – Farax 2011-05-20 10:30:16

1

你可以做同樣的,你會用HTML做,通過命名您的參數「數組[0]」,「數組[1]」,等等:

var urlVariable:URLVariables = new URLVariables(); 
    urlVariable["phpArray[0]"] = "arrayEntry0"; 
    urlVariable["phpArray[1]"] = "arrayEntry1"; 

    var loader:URLLoader = new URLLoader(); 
    var request:URLRequest = new URLRequest("http://yourserver.com/phpScript.php"); 
    request.method = URLRequestMethod.POST; 
    request.data = urlVariable; 

    loader.load(request); 

那麼服務器端就可以驗證由PHP腳本接收的結果:

print_r($_POST); 

它應該輸出:

Array 
    (
     [phpArray] => Array 
      (
       [0] => arrayEntry0 
       [1] => arrayEntry1 
      ) 
    ) 

和多維數組你可以使用:

urlVariable["phpArray[0][0]"]