FLASHとの連携+データベース+正規表現 - PHPプロ!Q&A掲示板

816

  • 0P

FLASHとの連携+データベース+正規表現

質問日時 / 2007年12月8日 01:52    回答数 / 7件

Questioner:  egorock  このエントリーをはてなブックマークに追加 

キーワード / FLASH    正規表現   

PHP初心者で、調べてみてもわからなかったので質問させてください。

MAMP(MySQL)とFLASHで作成しています。


FLASHとPHPを連携させています。
作っているものはメールフォームのようなものです。
FLASHの入力フォームで入力された内容を、正規表現で書き換え、データベースに格納したいのですが、
その場合、正規表現はどこにどうやって記述すればいいのでしょうか?
以下がデータベースに値を渡す際のPHPファイルです。

  1. <?php
  2.  
  3.  mysql_connect("localhost:8889","root","root");
  4.  mysql_selectdb("***");
  5.  
  6.  mysql_query("INSERT INTO **** VALUES('".$HTTP_GET_VARS['name']."','".$HTTP_GET_VARS['title']."','".$HTTP_GET_VARS['message']."')");
  7.  print("OK");
  8.  
  9. ?>
  10.  
  11. <html>
  12. <head>
  13. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  14. <title>Flashデータベース接続テスト</title>
  15. </head>
  16. <body>
  17. データベースに値が渡されました。
  18. </body>
  19. </html>

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01komugiこんにちはegorock さん ここでいう正規表現がどう
 ┗A01-1egorockkomugiさん ありがとうございます! 具体的には
  ┗A01-1-1laquDevlaquDevと申します。 komugiさんのコード中の8~10
   ┗A01-1-1-1egorock参考に以下のコードにしたのですが、変換されません。
    ┣A01-1-1-1-1laquDevご提示していただいたコードの17行目で、resultは成功
    ┗A01-1-1-1-2komugilaquDevさんへ mb_regex_encoding("UTF-8");なんて
     ┗A01-1-1-1-2-1egorocklaquDevさん komugiさん 23行目の mysql_query("

回答一覧

並び替え:

A01 参考になった
answererkomugi [12月8日 12:37] (最終編集:12月8日 12:37)

こんにちはegorock さん

ここでいう正規表現がどういった意味なのかわかりませんが、とりあえずエスケープなどの処理を書きましたのでどうぞ。

  1. <?php
  2.  
  3. if( $_GET['name'] == "" || $_GET['title'] == "" || $_GET['message'] == "" ){
  4.   echo "パラメータ不足";
  5.   exit;
  6. }
  7.  
  8. $in['name']    = mysql_escape_string( trim( $_GET['name'] ) );
  9. $in['title']   = mysql_escape_string( trim( $_GET['tilte'] ) );
  10. $in['message'] = mysql_escape_string( trim( $_GET['message'] ) );
  11.  
  12. $sql = "INSERT INTO (***)VALUES( '{$in['name']}' , '{$in['title']}' , '{$in['message']}' ); ";
  13. $result = mysql_query( $sql );
  14. ?>

この意見に回答する

ツリーへ TOPへ

A01-1
replyeregorock [12月8日 14:28]

komugiさん

ありがとうございます!
具体的には
「。」を「、」に書き換える、などの動作がしたいのですが。。
よろしければお願いします。

この意見に回答する

ツリーへ TOPへ

A01-1-1 参考になった
replyerlaquDev [12月8日 23:46]

laquDevと申します。

komugiさんのコード中の8~10行目にて mb_ereg_replace を使用して置き換えを行うことが
できます。
  1. mb_regex_encoding("EUC-JP"); // 正規表現関数で使用するエンコードを指定
  2. $in['name']    = mb_ereg_replace("。", "、", mysql_escape_stringtrim( $_GET['name'] ) ) );
  3. $in['title']   = mb_ereg_replace("。", "、", mysql_escape_stringtrim( $_GET['tilte'] ) ) );
  4. $in['message'] = mb_ereg_replace("。", "、", mysql_escape_stringtrim( $_GET['message'] ) ) );
例示していただいた「。」から「、」の変換を行います。
複数の文字を変換したいのであれば、第一引数を「[。・]」のようにします。
詳しくは正規表現についてお調べください。

 この例では、指定文字をある文字にしか変換できません。たとえば「&」は「and」、「_」は「 」と
いった対応は条件分岐をさせることになります。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyeregorock [12月9日 02:25]

参考に以下のコードにしたのですが、変換されません。
FLASHのスクリプトのほうに問題があるのでしょうか?
よろしければどこでどういった内容が記述がされているのか解説をお願いします。

  1. <?php
  2.  
  3.  if( $_GET['name'] == "" || $_GET['title'] == "" || $_GET['message'] == "" ){ 
  4.   echo "パラメータ不足"
  5.   exit
  6. } 
  7.   
  8. //正規表現
  9. mb_regex_encoding("UTF-8")// 正規表現関数で使用するエンコードを指定 
  10.  
  11. $in['name']    = mb_ereg_replace(""""mysql_escape_string( trim( $_GET['name'] ) ) )
  12. $in['title']   = mb_ereg_replace(""""mysql_escape_string( trim( $_GET['tilte'] ) ) )
  13. $in['message'] = mb_ereg_replace(""""mysql_escape_string( trim( $_GET['message'] ) ) );
  14.  
  15.  
  16. $sql = "INSERT INTO (+++)VALUES( '{$in['name']}' , '{$in['title']}' , '{$in['message']}' ); "
  17. $result = mysql_query( $sql )
  18.  
  19.  
  20.  mysql_connect("localhost:8889","root","root");
  21.  mysql_selectdb("***");
  22.  
  23.  mysql_query("INSERT INTO +++ VALUES('".$HTTP_GET_VARS['name']."','".$HTTP_GET_VARS['title']."','".$HTTP_GET_VARS['message']."')");
  24.  
  25.  print("OK");
  26.  
  27. ?>
  28.  
  29.  
  30. <html>
  31. <head>
  32. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  33. <title>Flashデータベース接続テスト</title>
  34. </head>
  35. <body>
  36. データベースに値が渡されました。
  37. </body>
  38. </html>

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-1 満足
replyerlaquDev [12月9日 22:23]

ご提示していただいたコードの17行目で、resultは成功の値を返してますか?
dbに接続しないで、insertを投げているので失敗していませんか?(pear::dbしか使ったことがないので詳しくはわかりませんが。。。)

さらにその後の20~23行目で、getで受けた値を変換せず、そのままinsertしていてので、そちらが成功していてdbが更新されているのだと思うのですが。。。

 まず、16行目の$sqlの内容を確認してみてください。そちらは変換されているはずです。環境によっては$_getで値が取得できないことがあるようですので、必要に応じて$HTTP_GET_VARSに書き換えてみてください。

ちなみに、各関数の処理は以下のような感じです。
trim
 前後の空白を除去しています。
mysql_escape_string
 更新対象の文字列に対してエスケープ処理を施しています。(insertのvalues句内で文字列を「'」で囲む必要があることは理解されてらっしゃるようですので、更新対象に「'」が含まれていたらどうなるのか容易にご想像できると思います。)
mb_ereg_replace
 正規表現によって、置き換え処理を行います。(第一引数:正規表現パターン、第二引数:パターンに一致もの置き換える文字列、第三引数:検索・置き換え対象の文字列)。
 第三引数中の第一引数の正規表現パターンに一致する文字列を検索し、第二引数に置き換えます。

ですので、
①getで受けた値の前後空白を除去
②SQL文法の文字をエスケープ
③パターンマッチする文字列を置き換え
といった処理をしていることになります。

 上記はすべて概要です。詳しくはヘルプを参照してください。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-2 満足
replyerkomugi [12月10日 15:30]

laquDevさんへ

mb_regex_encoding("UTF-8");なんてものがあるんですね。

毎回 $a = mb_convert_encoding( "ほげ" , "UTF-8" , "SJIS" );をしてから置換を行ってましたので大変便利です。
情報ありがとうございます。



egorockさんへ

初歩的ですがmb_stringは有効になってますでしょうか?

あとphpの文字コードも教えていただけると解決しやすくなります。
文字コードがあってないとうまく置換できない場合がありますので。

ついでにFlashで送られる文字コードも気になります。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1-2-1
replyeregorock [12月15日 00:56]

laquDevさん
komugiさん

23行目の
mysql_query("INSERT INTO +++ VALUES('".$HTTP_GET_VARS['name']."','".$HTTP_GET_VARS['title']."','".$HTTP_GET_VARS['message']."')"); 
の部分を修正したところ正常に動作いたしました。
ここでFLASHの値をそのまま送信していたため変換したものが表示されていなかったようです。

ご指導ありがとうございました。
助かりました!

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
負荷時のmysql_connect()エラー
 このエントリーをはてなブックマークに追加 
A
これはPHPというよりOSまたはMySQLのコミュニティで質問されたほうがいいと思います。 ぱっと思いついた範囲で記すと MySQL等のDBに「ある時点において同時に接続可能なクライアントの最大数」に制限があるよう...

>>続きを読む

今回のような実践的な経験がエンジニアのキャリアに繋がると思います。是非サービスを成功させて下さい!

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)