
先にFlashとphpの連携による日記について学んだが、今回は、簡易掲示板である。 本格的な掲示板をFlashで作成する機会は少ないと思うが、フルFLASHのサイトの一角に取り付ける場合には重宝するかもしれない。 FLASHでBBSを作成する利点には、好みのデザインで表示することができる(気が向けば何らかの動きのある表示も採用できる)こと、フルFLASHのサイトからまったく違ったデザインのBBSページに飛ばさないですむこと、html/php(cgi)組み合わせのBBSに比べてロボットによる荒らしを受けにくい(と思う?)ことなどがあげられる。 今回紹介するものは、表示を2行・8アイテム・5ページに、1アイテムの入力を100文字に限定しているが、もちろんこれは自由に設定できて、制限があるものではない。 用途によっては、もっと小型にすることも可能である。 私は、html/php(cgi)も含めて、BBSを自分で作るのは初めてであるので、ここに紹介するものは機能的にも、セキュリティー的にも十分配慮されているものとは言えない。 FLASHとphpの連携によるBBSの入門編ととって頂きたい。 (追)サンプルを掲示したところ、むやみに登録ボタンをクリックする人が多いことがわかり、連続投稿を抑制するスクリプトを付け加えることにしました。php側でも可能ですが、Flash側で行うと投稿者のIPアドレスの取得・保存が不要なのと、スクリプトも単純で済むというメリットがあります。 (再追)何も書かずに送信ボタンをクリックする人も多いようです。contents欄が未記入の場合をエラー処理にしました。 |
||||
| SAMPLE | ||||
| こちらにあります。 記述は自由です。 削除機能はありません。 表示は、5ページ、最新40アイテムまで。 40を超えたものは削除するようにしようと思いましたが、削除するのはもったいないという考え方もあり、その機能はなく、logファイルにたまるようになっています。 テキストファイルなので、あまり負担にはならないと思いますが、必要に応じて管理者が調整・管理する必要があります。 | ||||
| ステージの準備 | ||||
| ●600*630、背景色好みのステージ(12fps)を設定 ●コンポーネントのTextArea、TextInput、Buttonを使って、好みの配置で、題名(インスタンス名:sbBox)、名前(nmBox)、eメール(emBox)、内容(cntBox)入力用ボックスを配置する。 ●適当な位置に、エラーメッセージ表示用ダイナミックテキストフィールド(errMsg)、送信ボタン(submitB)を配置する この例では見えないが、送信ボタンの上にerrMsgがある。 ●新規シンボル(ボタン)の作成で、ボタンを5個作成し、pb1,pb2,,pb5のリンケージ名でライブラリーにおいておく (これは、過去データページを表示するためのリンクボタンに使い、入力アイテム数が増えると順次5まで表示させる) |
||||
| スクリプト(_root、FRAME1に記述) | ||||
|
||||
| FLASHスクリプトの説明 | ||||
| ● _root["dsp2Box"+i].maxscroll = 2; 記事内容の表示用Dテキストボックスは2行まで表示させる(3行以上になってもマウスによるスクロールは可能) ●var cntBox:mx.controls.TextArea; cntBox.maxChars = 100; 記事内容ボックスに記入できる文字数を100に ●sdData.sendAndLoad("bbs.php",rvData,"POST"); phpとのPOST交信で、sdDataの中身を送り、rvDataに受信する (追)連続投稿抑制スクリプト submitB.onRelease = function() { var body = sbBox.text+"|"+nmBox.text+"|"+emBox.text+"|"+cntBox.text; srData("registration",body); }; のところを、以下に変えます。 var prevcT = 0;
submitB.onRelease = function() {
var currentTime = new Date();
var cT = currentTime.getTime()/1000;
if (cT-prevcT<60) {
errMsg.text = "連続投稿";
} else {
errMsg.text = "";
var body = sbBox.text+"|"+nmBox.text+"|"+emBox.text+"|"+cntBox.text;
srData("registration",body);
}
prevcT = cT;
};
(再追) 上記+cotents欄未記入を登録拒否
var prevcT = 0;
submitB.onRelease = function() {
if (cntBox.text) {
errMsg.text = "";
var currentTime = new Date();
var cT = currentTime.getTime()/1000;
if (cT-prevcT<60) {
errMsg.text = "連続投稿";
} else {
var body = sbBox.text+"|"+nmBox.text+"|"+emBox.text+"|"+cntBox.text;
srData(body);
}
prevcT = cT;
} else {
errMsg.text = "contents未記入";
}
}; |
||||
| phpスクリプト | ||||
|
||||
| PHPスクリプトの説明 | ||||
| ●$mode = $_POST["step"]; POST受信のデータを変数に取り込む ●date("Y/m/d H:i") 年月日、時間を取得する関数、いろいろなパラメータ、表示方法が指定できる ●echo "&val=$bodyOut&"; 変数$bodyOutを変数名 val でFlashに送る。 ● for ($i=0; $i<$total; $i++) {$bodyOut .= $log[$i]; データ数のデータをつないで1つのデータとする .= はFlashの += に同じ ●$total = $count - 8*($page-1); Flashから送られてきたページ番号が例えば4ならば、前のページまでの件数(32)を引いた残り ●ファイルの操作関数については、前項「FLASH/phpの連携によるショートダイアリー」を参照のこと |
||||
|
|
||||
| HOME お勉強総リスト | ||||