首頁 > FLEX, PHP > FLEX on PHP , use AMFPHP 取得資料庫資料

FLEX on PHP , use AMFPHP 取得資料庫資料

2009年2月21日  瀏覽次數 : 9,837

在前篇介紹如何使用 amfphp 建立 FLEX 與 PHP 之間的 remoting ,FLEX on PHP , use AMFPHP remoting ,建立好連線後第二部當然是傳值的測試,不過接收的部分還算簡單,因此就把連接資料庫的部分一起測試吧。

image

本來在寫完基本連接後,開始尋找範例以及相關資料,遇到了兩點問題,不過呢,還好是 PHP 公布的資源比較多,雖然不是很順利,但是也算是解決了。

  1. 資料庫連接不上
  2. 回傳的 result 無法順利轉為 ArrayCollection

本來遇到以上兩點,真的超灰心的阿,不過 CF 用比較習慣的我實在有點被養壞了,平常只要資料連杰設定設定就可以讀取到資料庫,下完 SQL 語法就可以回傳到 FLEX ,轉換跑道到 PHP 實在不是很習慣。

首先遇到資料庫連接不上的問題,不管我在 PHP 的書籍還是 PHP 的網站上,資料庫的連接的寫法都是$conn = mysql_connect("localhost","root"); 這點當然沒有問題,但是之後的查詢語法卻就沒有看到 $conn 的出現了,一直到關閉資料庫才會看到,(通常的寫法) mysql_select_db("cdcol"); 或是 $result = mysql_query($query); 但是我實際執行的時候卻一直跳錯誤,一直到我仔細看一下 IDE 工具內的提醒,原來在查詢之後還必須加上資料庫連結的 LINK,因此我改成 mysql_select_db("cdcol",$conn); 也就解決了,這點還是要慶幸 PHP 的使用者還是比較多,搜尋起資料也比較方面。

至於第二點,因為本來卡在第一點遇到的問題,所以第二點我一直沒有辦法測試,但是我在看相關的書籍或是線上查詢,在 AS 與 PHP 的資料交換中只允許 Array 的傳遞,因為書本我沒帶回家,所以改天在 PO 詳細的轉換資料上來,而且我看每個 AMFPHP 的範例檔都先把得到的 result 用 while 迴圈把資料一個一個塞到 Array 中,但是我覺得這種方法實在笨的要死,如果真的要這樣,我就用手工打造 XML 就好了阿,不過實際在測試後發現,資料庫查詢回來的資料列 reuslt 其實是可以直接丟到 FLEX 的,而 FLEX 端直接使用 ArrayCollection 接收即可,這樣就解決了。

附上程式碼供大家參考參考

services\app\remotingtest.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
<?php
class remotingtest{
 
	function getRemoting(){
		$conn = mysql_connect("localhost","root");
		mysql_query("SET NAMES utf8", $conn);
		mysql_select_db("cdcol",$conn);
		$query = "select * from cds";
 
		$result = mysql_query($query,$conn);
 
		return $result;
	}
}
?>

phpRemoting.mxml

1
2
3
4
5
6
7
8
 
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="this.rophp.getRemoting();">
 
	<mx:RemoteObject id="rophp" destination="amfphp" source="app.remotingtest"/>
	<mx:DataGrid dataProvider="{this.rophp.getRemoting.lastResult}"/>
 
</mx:Application>

執行結果 :

image

Random Posts

Loading…

:: 把這篇好文推到書籤網站與更多人分享吧 ::
  • funp
  • Hemidemi
  • YahooKimo
  • Google
  • udn
  • Haohao
  • Live

相關文章 :

Ausir FLEX, PHP , , , , , , , , , ,

  1. 逮灣郎
    2009年3月11日22:16 | #1

    不好意思,想跟您請教一下..
    我想做一個簡易會員登入,用FLEX做介面[僅帳號密碼的TextInput] + PHP 透過AMFPHP取資料庫資料,當PHP透過AMFPHP取得資料庫欄位資料後,要在哪邊判斷FLEX介面所輸入的帳號密碼與資料庫中欄位資料是否相同?

  2. 逮灣郎
    2009年3月11日22:49 | #2

    承上: 這是我改的login.php

    而FLEX的MXML檔與您的http://blog.corausir.org/programing/ausir-645 這篇文章中hello.mxml相仿
    請問這樣的PHP寫法和FLEX寫法對於登入系統合乎邏輯嗎?
    不好意思打擾囉^^謝謝

  3. 逮灣郎
    2009年3月11日22:51 | #3

  4. 逮灣郎
    2009年3月11日22:51 | #4

    0.0 程式碼不能展示出來^^
    不好意思 >”<

  5. 逮灣郎
    2009年3月11日22:52 | #5

    if(($_POST["userID"]==$userID) &&
    ($_POST["userPASS"]==$userPASS)){
    return “welcome”.$userID ;
    }else{
    return “error,try again.”.$userID.$userPASS;
    }

  6. 逮灣郎
    2009年3月11日22:54 | #6

    修正一下@@ 一值打擾不好意思,原來是程式碼太長才出不來
    $userID =$row_result["userID"];
    $userPASS=$row_result["userPASS"];

    if(($_POST["userID"]==$userID) &&
    ($_POST["userPASS"]==$userPASS)){
    return “welcome”.$userID ;
    }else{
    return “error,try again.”;
    }

  7. 2009年3月11日23:05 | #7

    您好

    這個部分的確像您寫的程式碼

    在 PHP 驗證是否通過帳號密碼
    回傳 true or false 即可

    不用在 FLEX 做判斷~
    明天可以寫個範例供參考 ^^

  8. 逮灣郎
    2009年3月12日00:34 | #8

    謝謝您^^有範例可以供參考的話更讚囉0.0
    我現在對flex透過php抓資料庫有點模糊>”<

  9. 2009年3月12日00:35 | #9

    我已經在寫了~

    ^_^ 我應該會 PO 完才睡覺….

    爆肝中~~

  10. 2009年3月12日02:14 | #10

    你需要的資料我已經 PO 了

    http://blog.corausir.org/programing/ausir-820

    可以前往參考參考

  11. lan
    2009年5月28日22:33 | #11

    請問 如果我想抓的資料 是資料庫的圖檔呢
    要怎麼寫
    謝謝 因為我想做個相簿

  12. 2009年5月28日23:12 | #12

    @lan

    一般來說資料庫會記錄的是圖片的存放位置
    如果你要把圖片存入資料庫也可以
    不過應該是要先把資料轉為 bitmap 才可以

  13. lan
    2009年5月29日07:40 | #13

    請問如果是資料庫記錄的是圖片的存放位置
    那要怎麼叫出來
    謝謝

  14. 2009年5月29日22:04 | #14

    @lan

    讀出來的路徑
    再把他交給 IMAGE 標籤的 SOURCE 屬性即可

  15. lan
    2009年6月1日15:42 | #15

    恩 謝謝 我把圖篇抓出來了

  16. 2009年6月1日16:34 | #16

    @lan

    ^_^ 恭喜恭喜

  17. 笨笨
    2009年8月12日10:00 | #17

    flex一定要連結後台資料庫,才能架設網嗎?

  18. 2009年8月12日21:13 | #18

    @笨笨

    不一定阿,但是如果你存取資料,勢必用會到資料庫
    跟你寫 ASP PHP 相同

  19. Maci
    2009年10月7日14:16 | #19

    很高興可以看講的這麼清楚的文章
    不過請問一下我這樣子還是無法連線到amfphp耶
    使用這行source=”app.remotingtest”
    我不懂如何連結到我的AMFPHP呢?
    是不是要有設定getway呢?

  20. 2009年10月8日17:57 | #20

    @Maci

    HI~

    再使用 AMFPHP 之前還有一個 XML 要設定 GATEWAY
    你可以參考我之前的文章有提到

    請參考 AMFPHP 的第一篇文章~ 如果沒找到我再跟你講 ^^

  21. Forgot
    2009年10月12日20:48 | #21

    報告報告
    這一個也革命成功
    太開心了 !!

  22. 2009年10月13日17:39 | #22

    @Forgot

    呵呵 ~~ 往下一關挑戰 !

  23. HI
    2009年10月31日00:37 | #23

    想請問 這個只能在datagrid裡呈現嗎?
    能不能在combox裡呈現呢?
    因為我剛試過,我在combox裡的dataProvider打”{this.rophp.getRemoting.lastResult}”
    出來的是Object,(我已經把SQL查詢回傳為一個攔了)

  24. 2009年10月31日10:04 | #24

    @HI

    可以~~
    請在 comboBox 加上 labelField 欄位
    如下

    <mx:comboxBox datapovider=”資料” labelField=”欄位” />

  25. HI
    2009年10月31日11:44 | #25

    成功了!!
    我想了好久的問題怎麼你一下子就答出來了!
    這就是要叫我們多看書嗎

  26. 2009年10月31日11:46 | #26

    @HI

    不是 @@”

    是要多練習….加上熱血的無窮迴圈

    WHILE(熱血){
      熱情 -= 10 ;
      熟練度 += 1 ;
      腦細胞 -= 50 ;
    }
    完成;

  27. HI
    2009年10月31日11:59 | #27

    哈 我又有問題了
    我combox的資料已經可以顯現了
    接下來我想要點選我選擇的資料時,在一個label裡面顯現他的文字所以我這樣寫

    但是出不來!!!

  28. 2009年10月31日12:03 | #28

    @HI

    comboBox.selectedItem or comboBox.selectedLabel

  29. HI
    2009年10月31日12:07 | #29

    噗 我的程式碼沒出來

    我這樣寫了 可是還是沒有耶

  30. 2009年10月31日12:09 | #30

    這樣寫

    var floorId:int = myComboBox.selectedItem.category_floor ;
    var categoryId:int = myComboBox.selectedItem.category_id ;

    諸如此類

  31. HI
    2009年10月31日12:09 | #31

    程式碼怎麼一直出不來

  32. 2009年10月31日12:10 | #32

    WP 會吃程式碼O~~

    下次再改可以打程式碼的

  33. HI
    2009年10月31日12:11 | #33

    Label id=”testvalue” text=”{this.combo.selectedIndex}

  34. 2009年10月31日12:12 | #34

    @HI

    你那樣寫是沒錯的~~

    不過我剛剛發現你也是元智的…@@”

    現在是怎樣~~ 元智是 FLEX 研究中心嗎 @@”~~
    怎麼通通都遇到元智的…

    真是太恐怖了~~

  35. 2009年10月31日12:13 | #35

    我可以升級為元智住叫(助教)嗎

  36. HI
    2009年10月31日12:14 | #36

    對阿 我只是想增強實力拉
    可是越寫越挫折耶!!
    可是我這樣打 就不行了
    Label id=”testvalue” text=”{this.combo.selectedLabel}”

  37. HI
    2009年10月31日12:16 | #37

    你可以來當講師之類的 哈哈

  38. 2009年10月31日12:20 | #38

    玩看看吧

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="14">
    	<mx:ComboBox id="myComboBox">
    		<mx:dataProvider>
    			<mx:String>香蕉</mx:String>
    			<mx:String>西瓜</mx:String>
    			<mx:String>蘋果</mx:String>
    		</mx:dataProvider>
    	</mx:ComboBox>
    	<mx:Label text="選到的是 : {this.myComboBox.selectedItem}"/>
     
    </mx:Application>

    下課~~~!! 噹噹噹噹~~

  39. HI
    2009年10月31日22:50 | #39

    助教助教
    用上述的方法可以
    可是我發現,若是combox的內容是由AMFPHP傳過來的話
    像是
    ComboBox id=”combo” dataProvider=”{this.usersRemoting.SQL.lastResult}” labelField=”PV3DLocation”

    然後再丟到LABEL
    Label id=”testvalue” text=”{this.combo.selectedLabel}”
    他就會出現[pbject Pbject]
    報告完畢
    p.s像你那樣留程式碼是要怎麼留阿?

  40. 2009年11月2日18:27 | #40

    那是因為你的 LABEL 是 OBJECT 阿

    還有如果要留程式碼要用

    <pre lang="flex">
      code
    </pre>

    這樣子寫~ 但是不知道是不是只有管理員可以用

  41. peggyy
    2009年11月20日22:59 | #41

    可以請問您程式 可以讓我們複製 貼上的 的功能
    “Copy to clipboard”
    怎麼用的??
    謝謝

  42. 2009年11月24日09:31 | #42

    @peggyy

    那是一套程式碼顯示外掛 CODEBOX 的功能耶
    只要裝了那一套就可以用喔

  43. 疾風烈神
    2010年1月2日22:23 | #43

    請問Ausir大大~
    像以上的範例中
    所傳回的是一堆資料
    那麼在dataprovider中
    是否有方法可以區別傳回的資料是屬於哪一個欄位呢?
    若能區分,能否將該資料依其欄位來存入arraycollection中呢?
    亦即以上例來說會有四筆arraycollection~
    能否指點一下在下的困惑呢~謝謝!

  1. 本篇文章目前尚無任何 trackbacks 和 pingbacks。