人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

解決しました場合は3000ポイントお渡しさせていただきます。
flash,PHP,MySQLのデータの受け渡しについて質問します。
以下のURLにプログラムコード等詳細はあります。

http://homepage2.nifty.com/h/f1010/add_ranking.php
http://homepage2.nifty.com/h/f1010/Work2-2.fla
http://homepage2.nifty.com/h/f1010/Work2-2.html

flashはMXです。
flashでsendボタンを押しても、MySQLにデータが入力されません。
データベースのテーブルへの入力部分で
phpにエラーメッセージを記述しておいて、phpに接続し、それを調べたところ、
「データ挿入できません」というメッセージが表示されました。

ご教授よろしくお願いいたします。


●質問者: lonly777
●カテゴリ:ウェブ制作 ゲーム
✍キーワード:Flash MySQL PHP いただきます エラーメッセージ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● y-kawaz
●200ポイント

色々突っ込みどころは多いですが、とりあえず動かない原因は SQL の VALUES の括弧が閉じてないからじゃないでしょうか?

<?php
//↓これだと ) が足りない
mysql_query("INSERT INTO ranking VALUES('".$HTTP_GET_VARS['nickname']."', ".$HTTP_GET_VARS['score']);
//↓とりあえずコレで動きそう
mysql_query("INSERT INTO ranking VALUES('".$HTTP_GET_VARS['nickname']."', ".$HTTP_GET_VARS['score'].")");
//↓こうした方がよい
if(preg_match('/^[0-9]+$/', $_GET['score'])) {
 mysql_query("INSERT INTO ranking VALUES('".mysql_real_escape_string($_GET['nickname'])."', ".$_GET['score'].")");
}

本当はプレースホルダを使う方がよいと思いますが、とりあえず元のコードを尊重したとしても、文字列のエスケープは必須ですし、数値部分も適切なチェックが必要です。

また $HTTP_GET_VARS は非推奨なので $_GET を使った方がよいです。

◎質問者からの返答

ご指導ありがとうございます。スタンドアロンのパソコン(php4,MySQL4)で実行した場合はphpに記

した最後のokがブラウザでphpファイルを開くとブラウザに表示されました。しかし、Mysqlにはデ

ータが入力されていません。レンタルサーバー(php5,MySQL5)で実行すると何の変化もありませんで

した。

前のMook様の場合も同じでした。

一応PHP->MySQL, flash->phpの連携については別のサンプルで実験し動きました。

もう少し試行錯誤します。


2 ● Mook
●500ポイント ベストアンサー

これまでのやりとりでの結果をまとめてみます。


データベースへのインサートクエリ文は最初の挿入ができていたので、問題ないと思います。

INSERT INTO ranking VALUES('y-kawaz',1234);

しかし、2番目の PHP 経由での挿入は本当にできていますか?

(同じデータが二つありましたか。データを変えて試したほうが良かったですが。)


PHP のコードを見直してみましたが、関数の引数が不足しています。

define( "HOSTNAME", "localhost" );
define( "DB_USERNAME", "USERNAME" );
define( "DB_PASSWD", "PASSWORD" );
define( "DB_NAME", "DBNAME" );
define( "TABLE_NAME", "ranking" );

//MySQL に接続する。
$res_dbcon = mysql_connect( HOSTNAME, DB_USERNAME, DB_PASSWD ) or die( "MYSQL への接続に失敗しました。" );

// DB 選択
mysql_select_db( DB_NAME, $res_dbcon ) or die("Databaseの選択に失敗しました。");

// SQL を実行
if(preg_match('/^[0-9]+$/', $_GET['score'])) {
 $sql = "INSERT INTO ".TABLE_NAME." VALUES ('".mysql_real_escape_string($_GET['nickname'])."', ".$_GET['score'].")";
 $res_result = mysql_query( $sql, $res_dbcon );
} else {
 die("Score に数値が指定されていません。");
}

コードをこのように変えて、再度 URL による実行を試してみてはどうでしょうか。

◎質問者からの返答

Mook様。ありがとうございます。

>しかし、2番目の PHP 経由での挿入は本当にできていますか?

>(同じデータが二つありましたか。データを変えて試したほうが良かったですが。)

データは毎回変えて入力しましたので大丈夫です。どちらかというと最初のtelnetでの入力で少しとまどいました。上記のコードでの入力結果ですが、flashで作成したWork2-2.htmlからの入力で、MySQLにはデータ入力されませんでした。urlでphpを出力したところ、「Scoreに数値が指定されていません」というメッセージが表示されていました。flashMX(エディユケーション版)からPHPへの指示に間違いがあるのでかも知れません。flash CS4でも試してみようかとおもいます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ