AMFPHPを使ってMySQLデーターベースへ書き込みしてみました。
AMFPHPを使ってMySQLデーターベースへ書き込みしてみました。
こんな感じ。Flexからphpのクラスを呼び出してデーターの表示・追加が行えます。
AMFPHPを使うとphpで作成したクラスがそのままFlexから呼び出すことができます。
con.call("TestMySQLService.loadData", responder);
あとバイナリ通信となり、xml形式とは違い転送量が少なくとてもスマートです。
簡単な説明
AMFPHPをダウンロード
http://amfphp.org/
#今回はamfphp-1.9.beta.20080120.zipを使用してみました。
ダウンロードして解凍してできたファイルをwwwフォルダにコピーします。
日本語を扱う場合や文字コードがSJISな場合は以下を書き換えます。
「/path/to/amfphp/gateway.php」
//$gateway->setCharsetHandler("utf8_decode", "ISO-8859-1", "ISO-8859-1"); $gateway->setCharsetHandler("none", "ISO-8859-1", "ISO-8859-1");
簡易デバッグ方法として、
「http://localhost/path/to/amfphp/browser/」がオススメです。
#AMFPHPを「/path/to/amfphp/」に置いた場合
クラスの一覧やメソッドの表示・実行がブラウザから行えます。
それでは、実際のMySQLのデーターを表示+追加するPHPプログラムです。
phpのソースコード
<?php class TestMySQLService{ var $methodTable; function TestMySQLService(){ //DBへコネクト $dbh = mysql_connect("localhost", "root", ""); $dbh_s = mysql_select_db( "iplflex" ); } /* データ取得 */ function loadData() { GLOBAL $dbh; $sql = " SELECT * FROM ipl_test WHERE print = 1 "; $result = mysql_query( $sql ); while( $val = mysql_fetch_assoc( $result ) ){ $res_list[] = array( "name" => mb_convert_encoding( $val['name'] , "UTF-8" , "SJIS" ), "comment" => mb_convert_encoding( $val['comment'] , "UTF-8" , "SJIS" ), "print" => mb_convert_encoding( $val['print'] , "UTF-8" , "SJIS" ), ); } return $res_list; } /* データ挿入 */ function writeData( $name = "" , $comment = "" , $print = "" ){ GLOBAL $dbh; if ($name != "" && $comment != "" && $print != "") { $name = mysql_real_escape_string( $name ); $comment = mysql_real_escape_string( $comment ); $print = mysql_real_escape_string( $print ); $name = mb_convert_encoding( $name , "SJIS" , "UTF-8" ); $comment = mb_convert_encoding( $comment , "SJIS" , "UTF-8" ); $print = mb_convert_encoding( $print , "SJIS" , "UTF-8" ); $sql = "INSERT INTO ipl_test ( name , comment , print )VALUES( '{$name}' , '{$comment}' ,'{$print}' ) ; "; $result = mysql_query( $sql ); } return $this->loadData(); } } ?>
mb_convert_encodingの部分はデータベースがsjisな場合。UTF-8な場合はいらないです。
Flexのソースコード
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="top" backgroundColor="white" creationComplete="init();"> <mx:Script> <![CDATA[ import mx.controls.Alert; import flash.net.NetConnection; import flash.net.ObjectEncoding; import flash.net.Responder; [Bindable] public var dataList:Array = [];//返り値受け取り用 private const GATEWAY_URL:String = "http://localhost/path/to/amfphp/gateway.php"; private function init():void { var responder:Responder = new Responder(onResult, onFault); var con:NetConnection = getCon(); //データ受取 con.call("TestMySQLService.loadData", responder); } //データ送信 private function sendMessage():void { var responder:Responder = new Responder(onResult, onFault); var con:NetConnection = getCon(); con.call("TestMySQLService.writeData", responder, nameText.text , commentText.text , printText.text ); } //コネクション初期化 private function getCon():NetConnection { var time:Number = (new Date()).getTime(); var con:NetConnection = new NetConnection(); con.connect(GATEWAY_URL + "?time=" + time); con.objectEncoding = ObjectEncoding.AMF3; return con; } //データ取得成功 private function onResult(etc:*):void { if (typeof etc == "object") { dataList = etc; } else { Alert.show("Error-2"); } } //データ取得失敗 private function onFault(etc:*):void { Alert.show("Error-1"); } ]]> </mx:Script> <mx:ApplicationControlBar dock="true" width="521" height="68"> <mx:Label data="名前:" /> <mx:TextInput id="nameText" width="10%" /> <mx:Label data="内容:" /> <mx:TextInput id="commentText" width="335" /> <mx:Label data="表示:" /> <mx:TextInput id="printText" width="29" text="1"/> <mx:Button id="sendButton" label="送信" click="sendMessage();" /> </mx:ApplicationControlBar> <mx:DataGrid id="dataGrid" dataProvider="{dataList}" width="100%" height="100%"> <mx:columns> <mx:DataGridColumn dataField="name" headerText="名前" width="100" /> <mx:DataGridColumn dataField="comment" headerText="内容" /> <mx:DataGridColumn dataField="print" headerText="内容" /> </mx:columns> </mx:DataGrid> </mx:Application>
参考にさせていただいたページはこちら
http://www.studio-hedgehog.com/blog/flash/2007/08/
http://blog.asial.co.jp/323