flash與資料庫(DataBase,DB)的結合,並不是第一次見到的應用,凡舉線上問卷、活動,越來越多使用flash與DB的結合。
然而,flash並不能直接的對DB做應用,而是透過套件來完成與DB的溝通(說穿了也是網頁程式而已)。
根據這次接案的需求中的一部份:以flash做個相簿,並建立一個後台進行圖片和圖片敘述的上傳。
在網路上搜尋了一下相關資料,由於網頁的整體建構都是以php + MySQL做設計,因此也朝這個方向找。
原來flash可以透過網頁與DB做溝通,然而,適合拿來做溝通的網頁語言包括了:PHP、ASP、XML。因為系統的架構,所以就沿著flash + php + MySQL的方向找到了「Amfphp」。
這是一個小型的php套件,就是用來讓flash和DB進行溝通用的。也因為這樣,才知道原來寫flash的程式語言叫做Action Script(AS),這鬼也很奇怪,不太好寫,但是很容易懂,只是....邏輯有點難通,或許是長期接觸Java和C語言,對於AS語法不甚了解。但是稍微花點時間,就可以知道AS到底要怎麼做了,因為有相關的API可以在官網查詢,花些時間看...不難。
接著,開始做工吧!
1. 到官網下載Amfphp相關套件
2. 解壓縮該檔案,並放在網頁資料夾中
3. 開始寫程式(包括php、AS)
在此先說明,由於flash並不是我設計的,我也不會,所以在本篇文章中並不會提到任何有關flash的物件設計。
打開amfphp的資料夾,可以看到一個名為services的資料夾,在那資料夾下,我們就是要寫用php讀資料庫的function,好方便flash讀取。
程式如下:
class Counter{ var $dbhost = "localhost";// 你host的位置(可以用IP) var $dbname = "xxx";//你在資料庫表的名稱 var $dbuser = "root";//使用者帳號 var $dbpass = "xxx";//使用者密碼(自己設) var $conn; //這個function主要是連接資料庫 function Counter(){ $this->conn = mysql_pconnect($this->dbhost, $this->dbuser, $this->dbpass); mysql_query("SET NAMES 'utf8'"); mysql_select_db ($this->dbname); } //這個是從資料庫拿取資料 function getData(){ //number是目錄的名稱,若要取完全部資料可用* $rs=mysql_query("SELECT * FROM work"); return $rs; } //這是輸入資料進資料庫,在本文中沒有用到= =" function insert($number) { $sql="INSERT into work(Upload_file) values"; $sql.="('$number')"; $result = mysql_query($sql)or die(mysql_error()); if($result) return mysql_insert_id($this->conn); } } ?> |
這些程式不難,對於有些許經驗的php程式設計人員來說,簡單易懂。另外,要特別注意第二行的class名稱宣告,那鬼很重要!!
接著,稍微寫一下AS:
//---資料庫連線開始--- //帶入flash的套件 import flash.net.URLRequest; import flash.net.NetConnection; import flash.net.Responder; //連接amfphp裡的gateway.php var gateway:String = "http://localhost/giid/amfphp/gateway.php"; var connection:NetConnection; var responder:Responder; var saveData:Object; //資料接收成功或失敗 responder = new Responder(onResult, onFault); connection = new NetConnection; connection.connect(gateway); //call我們寫的PHP(檔案名稱.副程式名稱) connection.call("Counter.getData", responder); //-------以下為得到資料---- function onResult(onResult:Object):void { //資料傳送成功時 saveData = onResult.serverInfo.initialData; for(var j=0; j //Debug用,顯示從資料庫撈出來的檔案值 trace("have data " + saveData[j][7]); } for(var i=1; i //將saveData的值帶入到picture loader中 menu_mc["p"+i].targetPic = "../artFile/" + saveData[i-1][7]; menu_mc["p"+i].addEventListener(MouseEvent.CLICK, function(e:MouseEvent){ //當滑鼠點擊時,圖片會顯示在loader中。 pic_loader.startLoad( e.target.targetPic); } ); }//end for }//end onResult function onFault(fault:Object):void { trace("failt"); }//end onFault //告知flash要在處理一次程式後,停止影格的顯示...沒有這行顯示結果會瘋狂的閃爍 stop(); |
在上面那支程式裡,常寫網路程式的人,看一下變數宣告,就知道了....註解我也有寫,就看註解吧。
至於執行畫面...就可以透過資料庫讀出來的值進行圖片的流覽...大致上就這樣~我想偷懶了XDDDDDDD
留言列表