FLEX on PHP , use AMFPHP 取得資料庫資料
在前篇介紹如何使用 amfphp 建立 FLEX 與 PHP 之間的 remoting ,FLEX on PHP , use AMFPHP remoting ,建立好連線後第二部當然是傳值的測試,不過接收的部分還算簡單,因此就把連接資料庫的部分一起測試吧。
本來在寫完基本連接後,開始尋找範例以及相關資料,遇到了兩點問題,不過呢,還好是 PHP 公布的資源比較多,雖然不是很順利,但是也算是解決了。
- 資料庫連接不上
- 回傳的 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> |
執行結果 :

Random Posts
Loading…
相關文章 :









不好意思,想跟您請教一下..
我想做一個簡易會員登入,用FLEX做介面[僅帳號密碼的TextInput] + PHP 透過AMFPHP取資料庫資料,當PHP透過AMFPHP取得資料庫欄位資料後,要在哪邊判斷FLEX介面所輸入的帳號密碼與資料庫中欄位資料是否相同?
承上: 這是我改的login.php
而FLEX的MXML檔與您的http://blog.corausir.org/programing/ausir-645 這篇文章中hello.mxml相仿
請問這樣的PHP寫法和FLEX寫法對於登入系統合乎邏輯嗎?
不好意思打擾囉^^謝謝
0.0 程式碼不能展示出來^^
不好意思 >”<
if(($_POST["userID"]==$userID) &&
($_POST["userPASS"]==$userPASS)){
return “welcome”.$userID ;
}else{
return “error,try again.”.$userID.$userPASS;
}
修正一下@@ 一值打擾不好意思,原來是程式碼太長才出不來
$userID =$row_result["userID"];
$userPASS=$row_result["userPASS"];
if(($_POST["userID"]==$userID) &&
($_POST["userPASS"]==$userPASS)){
return “welcome”.$userID ;
}else{
return “error,try again.”;
}
您好
這個部分的確像您寫的程式碼
在 PHP 驗證是否通過帳號密碼
回傳 true or false 即可
不用在 FLEX 做判斷~
明天可以寫個範例供參考 ^^
謝謝您^^有範例可以供參考的話更讚囉0.0
我現在對flex透過php抓資料庫有點模糊>”<
我已經在寫了~
^_^ 我應該會 PO 完才睡覺….
爆肝中~~
你需要的資料我已經 PO 了
http://blog.corausir.org/programing/ausir-820
可以前往參考參考
請問 如果我想抓的資料 是資料庫的圖檔呢
要怎麼寫
謝謝 因為我想做個相簿
@lan
一般來說資料庫會記錄的是圖片的存放位置
如果你要把圖片存入資料庫也可以
不過應該是要先把資料轉為 bitmap 才可以
請問如果是資料庫記錄的是圖片的存放位置
那要怎麼叫出來
謝謝
@lan
讀出來的路徑
再把他交給 IMAGE 標籤的 SOURCE 屬性即可
恩 謝謝 我把圖篇抓出來了
@lan
^_^ 恭喜恭喜
flex一定要連結後台資料庫,才能架設網嗎?
@笨笨
不一定阿,但是如果你存取資料,勢必用會到資料庫
跟你寫 ASP PHP 相同
很高興可以看講的這麼清楚的文章
不過請問一下我這樣子還是無法連線到amfphp耶
使用這行source=”app.remotingtest”
我不懂如何連結到我的AMFPHP呢?
是不是要有設定getway呢?
@Maci
HI~
再使用 AMFPHP 之前還有一個 XML 要設定 GATEWAY
你可以參考我之前的文章有提到
請參考 AMFPHP 的第一篇文章~ 如果沒找到我再跟你講 ^^
報告報告
這一個也革命成功
太開心了 !!
@Forgot
呵呵 ~~ 往下一關挑戰 !
想請問 這個只能在datagrid裡呈現嗎?
能不能在combox裡呈現呢?
因為我剛試過,我在combox裡的dataProvider打”{this.rophp.getRemoting.lastResult}”
出來的是Object,(我已經把SQL查詢回傳為一個攔了)
@HI
可以~~
請在 comboBox 加上 labelField 欄位
如下
<mx:comboxBox datapovider=”資料” labelField=”欄位” />
成功了!!
我想了好久的問題怎麼你一下子就答出來了!
這就是要叫我們多看書嗎
@HI
不是 @@”
是要多練習….加上熱血的無窮迴圈
WHILE(熱血){
熱情 -= 10 ;
熟練度 += 1 ;
腦細胞 -= 50 ;
}
完成;
哈 我又有問題了
我combox的資料已經可以顯現了
接下來我想要點選我選擇的資料時,在一個label裡面顯現他的文字所以我這樣寫
但是出不來!!!
@HI
comboBox.selectedItem or comboBox.selectedLabel
噗 我的程式碼沒出來
我這樣寫了 可是還是沒有耶
這樣寫
var floorId:int = myComboBox.selectedItem.category_floor ;
var categoryId:int = myComboBox.selectedItem.category_id ;
諸如此類
程式碼怎麼一直出不來
WP 會吃程式碼O~~
下次再改可以打程式碼的
Label id=”testvalue” text=”{this.combo.selectedIndex}
@HI
你那樣寫是沒錯的~~
不過我剛剛發現你也是元智的…@@”
現在是怎樣~~ 元智是 FLEX 研究中心嗎 @@”~~
怎麼通通都遇到元智的…
真是太恐怖了~~
我可以升級為元智住叫(助教)嗎
對阿 我只是想增強實力拉
可是越寫越挫折耶!!
可是我這樣打 就不行了
Label id=”testvalue” text=”{this.combo.selectedLabel}”
你可以來當講師之類的 哈哈
玩看看吧
<?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>下課~~~!! 噹噹噹噹~~
助教助教
用上述的方法可以
可是我發現,若是combox的內容是由AMFPHP傳過來的話
像是
ComboBox id=”combo” dataProvider=”{this.usersRemoting.SQL.lastResult}” labelField=”PV3DLocation”
然後再丟到LABEL
Label id=”testvalue” text=”{this.combo.selectedLabel}”
他就會出現[pbject Pbject]
報告完畢
p.s像你那樣留程式碼是要怎麼留阿?
那是因為你的 LABEL 是 OBJECT 阿
還有如果要留程式碼要用
<pre lang="flex">
code
</pre>
這樣子寫~ 但是不知道是不是只有管理員可以用
可以請問您程式 可以讓我們複製 貼上的 的功能
“Copy to clipboard”
怎麼用的??
謝謝
@peggyy
那是一套程式碼顯示外掛 CODEBOX 的功能耶
只要裝了那一套就可以用喔
請問Ausir大大~
像以上的範例中
所傳回的是一堆資料
那麼在dataprovider中
是否有方法可以區別傳回的資料是屬於哪一個欄位呢?
若能區分,能否將該資料依其欄位來存入arraycollection中呢?
亦即以上例來說會有四筆arraycollection~
能否指點一下在下的困惑呢~謝謝!