解決しました場合は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に接続し、それを調べたところ、
「データ挿入できません」というメッセージが表示されました。

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

回答の条件
  • 1人10回まで
  • 登録:2009/10/10 16:47:27
  • 終了:2009/10/17 14:16:16

ベストアンサー

id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912009/10/11 17:37:45

ポイント500pt

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


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

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 による実行を試してみてはどうでしょうか。

id:lonly777

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

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

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

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

2009/10/12 19:56:48

その他の回答(1件)

id:y-kawaz No.1

y-kawaz回答回数1420ベストアンサー獲得回数2252009/10/10 17:47:55

ポイント200pt

色々突っ込みどころは多いですが、とりあえず動かない原因は 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 を使った方がよいです。

id:lonly777

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

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

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

した。

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

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

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

2009/10/10 20:46:36
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912009/10/11 17:37:45ここでベストアンサー

ポイント500pt

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


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

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 による実行を試してみてはどうでしょうか。

id:lonly777

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

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

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

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

2009/10/12 19:56:48
  • id:Mook
    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'].");");
    では?
  • id:Mook
    まずは MySQL で
    INSERT INTO ranking VALUES('y-kawaz',1234);
    は問題なく動作しますか?

    それが動作するなら、次に
    http://..../add_ranking.php?nickname=y-kawaz&score=1234
    は動作しますか?


    サーバに設定するときは、もちろん
    http://localhost/add_ranking.php
    は適切なURLに変更してますよね。
  • id:lonly777
    Mook様
    ありがとうございます。
    サーバーのみで確かめました。
    >INSERT INTO ranking VALUES('y-kawaz',1234);
    >は問題なく動作しますか?
    動作しました。データが入力されていました。

    >それが動作するなら、次に
    >http://..../add_ranking.php?nickname=y-kawaz&score=1234
    >は動作しますか?
    動作しました。データが入力されていました。

    前回、OKが出たのはエラーメッセージを記述していない場合でした。
    エラーメッセージを記述して確かめたら「データ挿入できません」とエラーメッセージが表示されました。

    Mook様、回答者の欄でのコメントもよろしければお願いします。
    y-kawaz様の推奨の別の方法についても確かめてみようと思います。
    皆様のご好意には感謝しております。
    本日、明日はあまり調べるのに時間がありませんが頑張ります。
    よろしくお願いいたします。

  • id:Mook
    die("Score に数値が指定されていません。");

    die("Score に数値が指定されていません[".$_GET['score']."]");
    のようにして、まずは何が来ているか確認してみてはどうでしょうか。

    データの処理やデータの中身をワンステップずつ確認していくのが早道だと思います。
  • id:lonly777
    Mook様。コメントが遅くなりました。phpに以下のように表示されました。
    Score に数値が指定されていません。[]
  • id:Mook
    ということは、score の値(nickname はチェックしていないので、こちらも空の可能性がありますが)が入っていない可能性が高そうですね。

    そうなると原因は flash 側の可能性が高そうです。
    他の部分は問題なく動いていますか?
  • id:lonly777
    Mook様
    ありがとうございます。
    試行錯誤していますが、まだ解決しておりません。
    phpのコード間違いですが、phpは少しの間違いならある程度までは自己判断してくれる機能があるらしいですね。助かります。

    質問締め切りが近いづいてきましたので、そろそろ締めます。ほんとにありがとうございました。
    flashに問題ありそうですね。
    ボタンはMySQL接続、テーブルの選択までしているのでOKですか、となるとflashからのデータの入力、渡しに不備があると考えられますがflash8でも調べてみます。
  • id:Mook
    Flash のほかの部分は良さそうに見えますので、
    formData.score = score;
    formData.nickname = nickname;
    の部分を
    formData.score = 9999;
    formData.nickname = 'lonly777';
    として、受け渡しの確認をしてみてどうでしょうか。

    もしこれで動けば score と nickname の変数の中身がないということですし、
    これでも動かないようでしたら、Flash から先への送信部分の問題だと切り
    分けられそうです。

    y-kawaz さん、上記で名前を例に使って失礼しました。
    (質問者さんの名前と取り違えていました。)
  • id:lonly777
    Mook様、ありがとうございます。
    >もしこれで動けば score と nickname の変数の中身がないということですし、
    >これでも動かないようでしたら、Flash から先への送信部分の問題だと切り
    >分けられそうです。

    動きませんでした。

    この質問はこれで終了しますが、新しい質問として同じ質問を載せておきます。
    アドバイスございましたらよろしくお願いいたします。
  • id:Mook
    いろいろ調べてみましたが、どうも問題はコード側のような感じがします。
    (Adobe Flash CS4 のトライアル版を使用してみているので、まったく同じ環境ではないと思いますが。)

    再確認ですが、PHP は問題なく動作しているという認識でよいでしょうか。

    こちらでは Flash からのURL呼び出し時に引数が渡っていないような感じでした。
    再質問の方の締め切りも近いようですが、何か分かったらこちらにコメントします。
  • id:lonly777
    別のより簡単なコードでflashー>php->mysqlにデータを渡そうとしたら空白のデータがmysqlに入りました。もう少し調べてみます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません