2010年02月11日

[FLASH] データベース連動

意図してたわけじゃないけど、Dボシュボスの"D"はデータベースの"D"じゃないかって気分になりつつあるような。データベースの使用にあたってプレミア価格の古本まで買って研究したけど、よくわかんなかったっス。仕方ないので主にここ(http://tu-kazu.jp/etc2.php)見ながら試行錯誤でデータベース操作を覚えました。まだ読み込みと書き込みしかできないけど、とりあえず間に合うだろー。

テキストデータの読み書きテスト用に簡易掲示板を作りました。

簡易掲示板(新しいデモ作ったのでこのデータは消えました)

以下、↑これの設定。忘れないように覚え書き。改良したり、過ちに突っ込んだりしていただけるとうれしゅうございます。ぜんぶ大文字で書かれている部分は、好きなように変更できる変数名とかです。


(1)MySQLの設定

WebArenaSuiteXにはphpMyAdminというデータベース管理プログラムがインストールされてたので、これ使ってデータの保存に使うデータベース、テーブル、フィールドを作成した。操作法は知らないので、それっぽい箇所を適当にいじくって作りましたー。

■テーブル名:TABLE
├フィールド名:NAME
└フィールド名:COMMENT


(2)Flashの設定

以下のパーツで構成されてます。

■名前入力欄:変数(_root.INPUTNAME)
■コメント入力欄:変数(_root.INPUTCOMMENT)
■テキストエリア(コンポーネント):MESSAGE
■ボタン


■読み込み部分(最初のフレームに書く。外部ASにしてもいいかも。)

//読み込み用オブジェクトだかなんだかを宣言。
LOADVARS=new LoadVars()

//以下、読み込まれたときの処理。
LOADVARS.onLoad=function(){

//データの総数を読み込んでループ。配列使えばもっと簡単になるけど、使い慣れないからやめた。
NUMBER=this.NUMBER
for(i=0;i<NUMBER;i++){

//テキストエリアに連番:NAME:COMMENT(改行)の形式で出力。
_root.MESSAGE.text += i + ":" + this["NAME"+i] + ":" + this["COMMENT"+i] + chr(10)
}
}

//READ.phpからデータ読み込み。
LOADVARS.load("READ.php")


■書き込み部分(ボタンを押された時に以下の動きをするように、どっかに書いとく。)

//書き込み用オブジェクトだかなんだかを宣言。
SENDVARS=new LoadVars()

//入力されたテキストを書き込み用の変数に代入。
SENDVARS.INPUTNAME=_root.INPUTNAME
SENDVARS.INPUTCOMMENT=_root.INPUTCOMMENT

//WRITE.phpにデータ送信。
SENDVARS.send("WRITE.php","_self","POST")



(3)PHPの設定(.phpというファイルを作成して中に記述します。)

■読み込み用(READ.php)

<?php

//データベースの設定
$DBNAME = "データベース名";
$USER = "ユーザー名";
$PASSWD = "パスワード";
$TBNAME = "テーブル名";
$HOST = "localhost";

//サーバーに接続
$DB = mysql_connect("$HOST", "$USER", "$PASSWD");

//データベースに接続
mysql_select_db($DBNAME);

//$SELが呼び出されたときの検索処理
$SEL = mysql_query("select NAME,COMMENT from $TBNAME");

//保存されてるレコードの数を調べてechoで出力
$num_rows = mysql_num_rows($SEL);
echo "&NUMBER="."$num_rows";

//レコードをFlash用に整形してechoで出力
$i = 0;
while ($row = mysql_fetch_row ($SEL)) {
echo "&NAME".$i."=".$row[0]."&COMMENT".$i."=".$row[1];
$i ++;
}

//$SELを実行
mysql_free_result ($SEL);

//データベースを閉じる
mysql_close($DB);

?>


■書き込み用(WRITE.php)

<?php

//上と同じ
$DBNAME = "データベース名";
$USER = "ユーザー名";
$PASSWD = "パスワード";
$TBNAME = "テーブル名";
$HOST = "localhost";

//サーバーに接続
$DB = mysql_connect("$HOST", "$USER", "$PASSWD");

//FlashからPOSTで送られてきた変数をphp内の変数に代入
$INPUTNAME = $_POST[INPUTNAME];
$INPUTCOMMENT = $_POST[INPUTCOMMENT];

//データベースに接続
mysql_select_db($DBNAME);

//送信されてきたデータをNAME,COMMENTフィールドに追加
$SQL = "insert into $tbname (NAME,COMMENT) values ('$INPUTNAME','$INPUTCOMMENT')";

//$RSTが呼び出された際に、上の命令を実行(↑この部分↓ひとつにまとめられる気がする…)
$RST = mysql_query($SQL);

//$RSTを実行
mysql_free_result($RST);

//データベースを閉じる
mysql_close($DB);

?>

//Flashに帰れないので手動おかえりリンク
<a href="お好きなURL">return</a>


babara : 23:34


←Dボシュボス(2)

[トップに戻る]

データベース連動(2)→


コメント

頑張

qwertyuio : 2010/04/18 (Sun) 11:49:29


↓まずレーダーをどこかに設置し、そのあとレーザーBを15基以内で設置すれば一斉発射できます。

danmaku : 2010/02/14 (Sun) 09:43:54


初。
何か大作になりそうな予感がしますねー
それはそうとボシュボスのレーザーBが一斉発射になる条件って何ですかね?
レーダーつけてもバラバラに撃っている…


とりあえず頑張ってくだせぇ

ttt : 2010/02/14 (Sun) 02:13:57


DボシュボスのDって、結局「大募集」でも「どんどん」
でもない、「データベース(仮)」だったんだ・・・。

sero : 2010/02/12 (Fri) 16:34:03


エスケプ情報ありがとうございます。調べてみまーす。sendAndLoad使うと画面遷移しないけどデータ書き込みもされないんですよねー。

babara : 2010/02/12 (Fri) 13:38:35


おせっかいながら、
ユーザ入力値をそのままSQL文につっこむとSQLインジェクションの危険性があるので
エスケープしたほうが良いと思います。
mysql_real_escape_stringとかで検索するとエスケープ処理について調べられます。

あと、LoadVars.sendAndLoadを使うとphpページに遷移せずにflash内で書き込み完了できます。

09 : 2010/02/12 (Fri) 12:43:35


そんな感じにすると思いまーす

babara : 2010/02/12 (Fri) 00:34:44


まだ試作品段階なので、ボスじゃないですね。
「データをあるだけ読んでるのは効率悪い」と読み替えてください。
えらそうですいません。

Yakumo99 : 2010/02/12 (Fri) 00:14:17


ソースに読み間違いがなければ、ボスを登録されているだけ読み込んでいるような気がしますが、これだとメモリ、サーバ負荷ともに効率が悪い気がします。
オートインクリメントのボスIDを設けて、呼び出しの都度1体分だけ読み込むようにした方がいいのではないでしょうか。

Yakumo99 : 2010/02/12 (Fri) 00:03:19


よくわかんないけど頑張ってね~

konishi : 2010/02/11 (Thu) 23:47:04


[ 1 ]

コメントを投稿する





企画協力しました



著書です



WebMoney enjoy. Award 2009 シルバー賞受賞

WebMoney ぷちカンパ