WebプログラミングU PHP

 目次へ 前へ 次へ

2008/7/22 久米

 

5. PHPとActionScript

クライアント側にActionScriptを使用し、PHPと連携することによって、強力なアプリケーションを作ることができます。

5.1 ActionScript側スクリプト

  方法 説明
1

System.useCodepage=true;

FlashテキストエンコーディングはUTF-8形式をデフォルトにしている。
これをユーザー環境のデフォルトエンコーディング形式にするスイッチ。
WindowsやMacではShift-JISになる。

2 送信用インスタンス=new LoadVars();
受信用インスタンス=new LoadVars();

LoadVarsオブジェクトを生成する。

3 送信用インスタンス.変数1=・・・; 送信用変数設定。
4 送信用インスタンス.sendAndLoad(URL,受信用インスタンス);

指定したURLに変数送信し、その後、受信もするメソッド。
受信用インスタンス名を指定する。

5 受信用インスタンス.onLoad =function(s){・・・} 受信した時に発生するイベント。
引数sがあるので注意。
引数sは成功したか失敗したかのtruefalse

5.2 PHP側スクリプト

  方法 説明
1

$変数1=$_POST['変数1'];
・・・

変数をPOSTで受取る

$a=$_POST['dt'];
$b=$_POST['msg'];
2 サーバ側の内部処理

例えばデータベース検索などをする。

 
3 print "結果1=○○&結果2=○○&結果3=○○"; 結果の変数名と値を
変数名=値のペアでプリントする。
複数ある場合は、間に&を入れる。
print "re=成功です。&x=".$x."&y=OK";

 

簡単な例1 メモ帳に書いた文字を読み込んで表示する。

簡単な例2 ActionScriptで入力した文字を、鸚鵡返しに表示する。

簡単な例3 1章の最後でやった訪問者カウンタを表示してみる。

注)普通に作成した時、更新ボタンでカウンタが更新されないのはFlashのキャッシュが強いからです。
jusin.load("counter.php?r="+Math.random());などとurlにゴミをつけて毎回変わるようにすれば更新されます。

 

演習 会員ログインを作ってみる。

 

5.3 掲示板への応用例

掲示板表示スクリプト

board.php

ポイント 複数のデータをひとつの文字列変数で渡すため、区切り記号として\tタブを使用する。

<?php
//board.php
require_once($_SERVER['DOCUMENT_ROOT']."/kume/common/db_value.php");

function convertForAS($a){//ActionScriptに送信するための変換関数
    $b=str_replace("\r\n", "\n", $a);//改行コードをActionScript用に1つにする。
    $c=str_replace("&", "&", $b);//送信用に&を全角に。
    return $c;
}

$con=mysql_connect($DBSERVER, $DBUSER, $DBPASSWORD);
$sel=mysql_select_db($DBNAME, $con);

$sql="SELECT * FROM bbs ORDER BY id DESC LIMIT 30";
$rst=mysql_query($sql, $con);

$name="";
$regidate="";
$message="";
$len=mysql_num_rows($rst);
for($i=0;$i<$len;$i++){
    $row=mysql_fetch_array($rst);
    $name.=$row["name"];
    $regidate.=$row["regidate"];
    $message.=$row["message"];
    if($i!=$len-1) {
        //区切り文字として\t(タブ)を使用する
        $name.="\t";
        $regidate.="\t";
        $message.="\t";
    }
}
mysql_free_result($rst);
$cls=mysql_close($con);

$name=convertForAS($name);
$regidate=convertForAS($regidate);
$message=convertForAS($message);

print "name=".$name."&regidate=".$regidate."&message=".$message;
?>

board.flaのフレームアクション

ポイント 受け取った文字列変数を分解するため、split("\t")関数を利用する。

//掲示板表示のスクリプト

bodyPanel.body_txt.html=true;
System.useCodepage = true;

loadV = new LoadVars();
loadV.load("board.php");

loadV.onLoad =function(success){
    if(!success) return;
    
    var n=new Array();
    var r=new Array();
    var m=new Array();
    n=loadV.name.split("\t");
    r=loadV.regidate.split("\t");
    m=loadV.message.split("\t");
    var body="";
    for(var i=0;i<n.length;i++){
        body=body+"<p>□□□□□□□□<br>";
        body=body+"<b>投稿者:"+n[i]+"</b>";
        body=body+"  投稿日時:"+r[i]+"<br>";
        body=body+m[i]+"<br></p>";
    }
    bodyPanel.body_txt.htmlText=body;
}

注)flashはキャッシュが強力なので、flaを変更した時は、ブラウザを一旦閉じてから試してみましょう。

 

掲示板投稿スクリプト

は推して図るべし

 

コラム PHPとJavaScript

  1. クライアント側での入力チェックにJavaScriptを使用する。
  2. サーバ側PHPで入力チェックすると、サーバに負荷がかかる。

掲示板 submit.htmの例

<html>
<head>
<script type="text/javascript">
<!--
function checkForm(){
  if(document.f.name.value==""){
    alert("名前が入力されていません。");
    return false;
  }
  if(document.f.message.value==""){
    alert("メッセージが入力されていません。");
    return false;
  }
  return true;
}
// -->
</script>
<meta httpequiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>投稿</title>
</head>
<body>
<h1>掲示板投稿</h1>
<form name="f" method="post" action="submit2.php" onsubmit="return checkForm()">
名前:<input type="text" name="name">
<input type="submit" name="sub" value="投稿"><br>
<textarea name="message" cols="80" rows="10"></textarea>
</form>
</body>
</html>