Flexで掲示板作成
http://i4u.chu.jp/komugi/
書き込みテストOKですのでぜひレスポンスとか確かめてください。
自分とこのイラストのサイトをちょこちょこ編集しているんですが、掲示板の部分があるのでそこもFlexで作成してみました。
ちょっとロリポップサーバーがphpのバージョンが4で使えない関数があってデバッグにひと苦労しました。
使えなかった関数はfile_put_stringでfgetcsvでは引数をしっかり設定しないとダメでした。
受け皿のPHPのソース
<?php //BBSのログ取得と更新 $file = "log.csv"; if( $_GET['type'] == "get" ){ //BBSのログをxmlで出力 $i = 0; $i_max = 10; header ("Content-Type: text/xml; charset=UTF-8"); echo <<<EOD <result> EOD; //ファイルの読み込みとxml出力 $fp = fopen( $file , "r" ); while( $line = fgetcsv( $fp ,1000, ',') ){ //title,name,body,print if( $line[3] == 1 ){ echo <<<EOD <item> <name>{$line[0]}</name> <title>{$line[1]}</title> <comment>{$line[2]}</comment> </item> EOD; if( $i >= $i_max )break; $i++; } } echo <<<EOD </result> EOD; exit; }elseif( $_GET['type'] == "update" ){ //BBSの書き込み if( $_POST['name'] != "" && $_POST['title'] != "" && $_POST['comment'] != "" ){ $name = htmlspecialchars( trim( str_replace( "," , "" , $_POST['name'] ) ) ); $title = htmlspecialchars( trim( str_replace( "," , "" , $_POST['title'] ) ) ); $comment = htmlspecialchars( trim( str_replace( "," , "" , $_POST['comment'] ) ) ); $line = "{$name},{$title},{$comment},1\r\n"; //ファイルの先頭に追加書き込み $FILE = $line . file_get_contents( $file ); $fp = fopen( $file , "w" ); fputs( $fp , $FILE ); fclose( $fp ); //ついでにログもxml出力しておく header ("Content-Type: text/xml; charset=UTF-8"); echo file_get_contents( "http://i4u.chu.jp/komugi/bbs.php?type=get" ); } exit; } ?>
次にFlexでの送信方法。HTTPsearviceを使えば楽ちんです。
BBSログ表示用とBBSへフォーム送信用を用意します。
<mx:HTTPService id="bbsGet" url="http://i4u.chu.jp/komugi/bbs.php?type=get" method="POST" resultFormat="e4x" useProxy="false" showBusyCursor="true"/> <mx:HTTPService id="bbsSend" url="http://i4u.chu.jp/komugi/bbs.php?type=update" method="POST" resultFormat="e4x" useProxy="false" showBusyCursor="true" result="{bbsData.dataProvider=bbsSend.lastResult.item}"/>
あとは、フォームを整理
<mx:Form id="myForm" x="10" y="10" width="328" height="343"> <mx:FormItem label="名前" backgroundColor="0xffccff"> <mx:TextInput id="bbsName" styleName="borderAll"/> </mx:FormItem> <mx:FormItem label="タイトル" backgroundColor="0xffccff"> <mx:TextInput id="bbsTitle" styleName="borderAll"/> </mx:FormItem> <mx:FormItem label="コメント" backgroundColor="0xffccff"> <mx:TextArea id="bbsComment" width="215" height="207" styleName="borderAll"/> </mx:FormItem> <mx:FormItem> <mx:Button id="bbsBtn" label="投稿" click="onSend()"/> </mx:FormItem> </mx:Form> <mx:TileList backgroundColor="0xffccff" id="bbsData" x="346" y="10" width="444" height="343" dataProvider="{bbsGet.lastResult.item}" columnCount="1" selectable="false"> <mx:itemRenderer> <mx:Component> <mx:VBox> <mx:Text text="{data.name}さん" textAlign="left" width="330"/> <mx:Text text="{data.title}" textAlign="left" width="330"/> <mx:TextArea text="{data.comment}" width="100%" height="80" textAlign="left" editable="false" /> <mx:HRule width="330"/> </mx:VBox> </mx:Component> </mx:itemRenderer> </mx:TileList>
あとはフォームのボタンが押されたときにデーターを送信する部分を書けばOKです。
//BBS送信 import mx.controls.Alert; private function onSend():void{ if( bbsTitle.text != '' && bbsName.text != '' && bbsComment.text != '' ){ bbsSend.send({ "title":bbsTitle.text, "name":bbsName.text, "comment":bbsComment.text }); }else{ Alert.show("未記入の項目があります!"); } }
PHPプログラムでPOSTデータがある場合は書き込みで、ない場合はログの出力とすればFlex側のHTTPServiceが1つで済むので、そっちのほうがいいかも?