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>
コメント
頑張
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 ]



