XMLデータバインド問い合わせ


  mxml




http://lightbox.on.coocan.jp/php/flex2/req.swf

httpSrv.request.name = sname.text; で、UTF-8 で URL エンコードされているようです。
コードで URLエンコードすると、PHP では、$_GET の中に URL エンコードされた値が入っていました。
( つまり、URLデコードが必要だった )

1) HTTPService による、DB問い合わせ( 応答の非同期 )。
2) 画面の画像化 ( PNG )
3) flash 右クリックメニューのカスタマイズ
4) メニュー処理

  

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
	creationComplete="initApp()"
	paddingTop="25"
	viewSourceURL="http://winofsql.jp/VA003334/flex2071129234745.htm"
>
<mx:Script>
<![CDATA[

	import mx.controls.Alert;
	import mx.rpc.AsyncToken;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;
	import mx.collections.ArrayCollection;
	import mx.events.*;
	import flash.net.*;
	import flash.display.*;
	import PNGEncoder;
	import mx.utils.Base64Encoder;

	private var post:URLLoader;

	// *****************************************************
	// 初期化
	// *****************************************************
	private function initApp():void {

		post = new URLLoader();

		// IO エラー
		post.addEventListener(IOErrorEvent.IO_ERROR, systemError);

		// 処理終了
		post.addEventListener(Event.COMPLETE, completeUpload);


		// 右クリックメニュー
		var cMenu:ContextMenu = new ContextMenu();
		cMenu.hideBuiltInItems();

		var cMenuItem:ContextMenuItem =
			new ContextMenuItem("保存された画像の表示");
		cMenuItem.addEventListener(
			ContextMenuEvent.MENU_ITEM_SELECT, dispImage
		);
		cMenu.customItems.push(cMenuItem);

		var cMenuItem2:ContextMenuItem =
			new ContextMenuItem("ソースコード");
		cMenuItem2.addEventListener(
			ContextMenuEvent.MENU_ITEM_SELECT, dispSource
		);
		cMenu.customItems.push(cMenuItem2);

		this.contextMenu = cMenu;


	}

	// *************************************************
	// 保存された画像の表示
	// *************************************************
	private function dispImage(event:ContextMenuEvent):void {

		var req:URLRequest = new URLRequest("./upload.png");
		navigateToURL(req, "_blank");

	}
	// *************************************************
	// ソースの表示
	// *************************************************
	private function dispSource(event:ContextMenuEvent):void {

		var req:URLRequest = new URLRequest(
			"http://winofsql.jp/VA003334/flex2071129234745.htm"
		);
		navigateToURL(req, "_blank");

	}

	// *****************************************************
	// HTTPServiceを使用してHTTPリクエスト(GET)を行う
	// *****************************************************
	private function getXML(
		httpSrv:HTTPService,
		targetURL:String,
		test:Number=-1
	):void {
		// リクエストするURLをセット
		httpSrv.url = targetURL;

		httpSrv.request.test = test;
		httpSrv.request.name = "";
		if ( sname.text != "" ) {
			httpSrv.request.name = sname.text;
		}


		// レスポンス結果のデータフォーマット
		httpSrv.resultFormat = "e4x";
		
		httpSrv.method = "GET";
		
		// リクエストを実行
		var at:AsyncToken = httpSrv.send();

		at.reqId = test;

	}
	
	// *****************************************************
	// HTTPServiceが成功
	// *****************************************************
	private function resultHandler(e:ResultEvent):void
	{
		var dataSet:Object = null;

		dataSet = e.result.row;

		dg1.dataProvider = dataSet;

		rid.text = e.token.reqId;
		dg1.selectedIndex = 0;
	}
	
	// *****************************************************
	// HTTPServiceでエラーが発生した
	// *****************************************************
	private function faultHandler(e:FaultEvent):void
	{
		Alert.show("HTTPService失敗\n\n理由 : " + e.fault.message);
	}


	// *****************************************************
	// メニュー処理
	// *****************************************************
	private function menuHandler(event:MenuEvent):void  {

		if ( event.item.@data == "req_1" ) {
			getXML(srv, './data.php');
		}
		if ( event.item.@data == "req_2" ) {
			getXML(srv, './data.php', 0);
		}
		if ( event.item.@data == "req_3" ) {
			getXML(srv, './data.php', 1);
		}
		if ( event.item.@data == "act_1" ) {
			dg1.dataProvider = new ArrayCollection();
		}
		if ( event.item.@data == "act_2" ) {
			var e:ContextMenuEvent = 
				new ContextMenuEvent(
					ContextMenuEvent.MENU_ITEM_SELECT
				);
			dispImage( e );
		}
		if ( event.item.@data == "act_3" ) {
			var e2:ContextMenuEvent = 
				new ContextMenuEvent(
					ContextMenuEvent.MENU_ITEM_SELECT
				);
			dispSource( e2 );
		}
	}

	// *****************************************************
	// Panel を画像化してアップロード
	// Windows 2000 の IIS では応答が帰らず、IE 死亡
	// AN ATTPD では、データが渡らない
	// *****************************************************
	private function uploadImage(target:DisplayObject):void
	{
		var bmp:BitmapData = new BitmapData(target.width, target.height);
		bmp.draw(target);
		var png:ByteArray = PNGEncoder.encode(bmp);

		var req:URLRequest = new URLRequest("./savePng.php");
		req.data = png;
		req.method = URLRequestMethod.POST;

		post.load(req);

		bmp.dispose();

	}

	// *************************************************
	// 処理終了
	// *************************************************
	private function completeUpload(event:Event):void {

		Alert.show(post.data);

	}
			
	// *************************************************
	// IO エラー
	// *************************************************
	private function systemError(event:IOErrorEvent):void{
		Alert.show("IOError:" + event.text);
	}

]]>
</mx:Script>

<mx:HTTPService id="srv" showBusyCursor="true"
		 result="resultHandler(event)"
		 fault="faultHandler(event)" />

<mx:XML format="e4x" id="myMenuModel">
	<root label="Menu">
		<menuitem label="問合せ">
			<menuitem label="ロード" data="req_1"/>
			<menuitem label="男性" data="req_2"/>
			<menuitem label="女性" data="req_3"/>
		</menuitem>
		<menuitem label="処理">
			<menuitem label="クリアデータ" data="act_1"/>
			<menuitem type="separator"/>
			<menuitem label="保存された画像の表示" data="act_2"/>
			<menuitem label="ソースコード" data="act_3"/>
		</menuitem>
	</root>
</mx:XML>

<mx:Panel
	id="panel"
	title="社員問合せ" width="660" height="550"
	paddingTop="10"
	paddingBottom="10"
	paddingLeft="10"
	paddingRight="10"
>
	<mx:MenuBar
		id="myMenu"
		labelField="@label"
		showRoot="false"
		itemClick="menuHandler(event);"
		width="100%"
		fontWeight="bold"
	>
		<mx:dataProvider>
			{myMenuModel}
		</mx:dataProvider>
	</mx:MenuBar>

	<mx:HBox>
		<mx:Label text="氏 名"/>
		<mx:TextInput id="sname" text=""/>
		<mx:Button label="ロード" click="getXML(srv, './data.php')" />
		<mx:Button label="男性" click="getXML(srv, './data.php', 0)" />
		<mx:Button label="女性" click="getXML(srv, './data.php', 1)" />
		<mx:Button
			label="クリアデータ"
			click="dg1.dataProvider = new ArrayCollection()"
		/>
		<mx:Button
			label="現在の状態を画像化"
			click="uploadImage(panel)"
		/>
	</mx:HBox>

	<mx:DataGrid id="dg1" height="400">
	<mx:columns>
	<mx:DataGridColumn headerText="CD" dataField="COL_1" width="46"/>
	<mx:DataGridColumn headerText="氏名" dataField="COL_2" width="70"/>
	<mx:DataGridColumn headerText="フリガナ" dataField="COL_3" width="100"/>
	<mx:DataGridColumn headerText="所属" dataField="COL_4" width="46"/>
	<mx:DataGridColumn headerText="性別" dataField="COL_5" width="40"/>
	<mx:DataGridColumn headerText="作成日" dataField="COL_6" width="70"/>
	<mx:DataGridColumn headerText="更新日" dataField="COL_7" width="70"/>
	<mx:DataGridColumn
		headerText="給与"
		dataField="COL_8"
		width="60"
		textAlign="right"
	/>
	<mx:DataGridColumn
		headerText="手当"
		dataField="COL_9"
		width="60"
		textAlign="right"
	/>
	<mx:DataGridColumn headerText="管理者" dataField="COL_10" width="46"/>
	</mx:columns>
	</mx:DataGrid>

	<mx:HBox>
		<mx:Label text="Request ID => "/>
		<mx:Label id="rid" text=""/>
	</mx:HBox>


</mx:Panel>
</mx:Application>
  







  サーバー側( PHP )




XML の表示

  

<?
ini_set( 'display_errors', "1" );
$conf_client_charset = "utf-8";
$conf_db_charset = "euc-jp";
$conf_db_type = 1;
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Content-Type: text/xml; Charset=$conf_client_charset" );

mb_language( "ja" );
mb_internal_encoding("utf-8");

print "<?xml version=\"1.0\" encoding=\"$conf_client_charset\"?>";
print "<data>";

# **********************************************************
# 外部ファイル
# **********************************************************
inc( "http://homepage2.nifty.com/lightbox/gen/db.php" );

$SQL = new DB( "localhost", "lightbox", "root", "" );

$Cond = "";

$str='';
$str.="select 社員コード \n	,氏名 \n	,フリガナ \n	,所属 ";
$str.="\n	,case 性別  \n	when 1 then '女性' \n	when ";
$str.="0 then '男性' \n	end as 性別 \n	,作成日 \n	,更新日 ";
$str.="\n	,case   \n	when 給与 < 1000 then \n		給与 ";
$str.="\n	when 給与 < 1000000 then \n		concat( \n";
$str.="truncate(給与/1000,0),',',right(給与,3) ";
$str.="\n		) \n	when 給与 < 1000000000 then \n		concat( ";
$str.="\n			truncate(給与/1000000,0),',' \n";
$str.=", right(concat('00',mod(truncate(給与/1000,0),1000)),3) ";
$str.=",',' \n			,right(給与,3) \n		) \n	end as 給与 ";
$str.="\n	,手当 \n	,管理者  \n from 社員マスタ ";
$Query .= $str;

if ( $_GET['test'] == 1 ) {
	$Cond .= " where 性別 = 1";
}
if ( $_GET['test'] == 0 ) {
	$Cond .= " where 性別 = 0";
}

if ( $_GET['name'] != "" ) {
	if ( $Cond != "" ) {
		$Cond .= " and ";
	}
	else {
		$Cond .= " where ";
	}
	$Cond .= " 氏名 like '%{$_GET['name']}%'";
}

$Column = $SQL->QueryEx( $Query . $Cond );

while( $Column ) {

	print el(0,"row");
	for( $i = 0; $i < 11; $i++ ) {
		print elset(1,"COL_" . ($i+1), $Column[$i] );
	}
	print el(0,"/row");
	print "\n";

	$Column = $SQL->QueryEx( );

}

# **********************************************************
# 接続解除
# **********************************************************
$SQL->Close();

print "</data>";


# **********************************************************
# URL によるコード取得
# **********************************************************
function inc( $path ) {
	$inc = @file( $path );
	array_shift($inc);
	array_pop($inc);
	$GLOBALS['inc_eval_txt'] = implode( "", $inc );
	eval($GLOBALS['inc_eval_txt']);
}

# **********************************************************
# 要素
# **********************************************************
function el( $lv, $ename ) {

	$tab = "";
	for( $i = 0; $i < $lv; $i++ ) {
		$tab .= "\t";
	}

	return "$tab<$ename>\n";

}

# **********************************************************
# 要素とデータ
# **********************************************************
function elset( $lv, $ename, $edata ) {

	$tab = "";
	for( $i = 0; $i < $lv; $i++ ) {
		$tab .= "\t";
	}

	return "$tab<$ename>$edata</$ename>\n";

}
?>
  


  画像保存用 PHP

savePng.php
  

<?

$fp = fopen( "php://input", "rb" );
$wfp = fopen( "upload.png", "wb" );

while( $ret = fread( $fp, 4096 ) ) {

	fwrite( $wfp, $ret );

}

fclose($wfp);
fclose($fp);


?>
画像が保存されました
  




yahoo  google  MSDN  MSDN(us)  WinFAQ  Win Howto  tohoho  ie_DHTML  vector  wdic  辞書  天気 


[flex2]
claudebot
24/04/17 05:09:39
InfoBoard Version 1.00 : Language=Perl

1 BatchHelper COMprog CommonSpec Cprog CprogBase CprogSAMPLE CprogSTD CprogSTD2 CprogWinsock Cygwin GameScript HTML HTMLcss InstallShield InstallShieldFunc JScript JScriptSAMPLE Jsfuncs LLINK OldProg OracleGold OracleSilver PRO PRObrowser PROc PROconePOINT PROcontrol PROftpclient PROjscript PROmailer PROperl PROperlCHAT PROphp PROphpLesson PROphpLesson2 PROphpLesson3 PROphpfunction PROphpfunctionArray PROphpfunctionMisc PROphpfunctionString PROsql PROvb PROvbFunction PROvbString PROvbdbmtn PROvbonepoint PROwebapp PROwin1POINT PROwinSYSTEM PROwinYOROZU PROwindows ProjectBoard RealPHP ScriptAPP ScriptMaster VBRealtime Vsfuncs a1root access accreq adsi ajax amazon argus asp aspSample aspVarious aspdotnet aw2kinst cappvariety centura ckeyword classStyle cmaterial cmbin cmdbapp cmenum cmlang cmlistbox cmstd cmstdseed cmtxt cs daz3d db dbCommon dbaccess dnettool dos download flex2 flex3 flex4 framemtn framereq freeWorld freesoft gimp ginpro giodownload google hdml home hta htmlDom ie9svg install java javaSwing javascript jetsql jquery jsp jspTest jspVarious lightbox listasp listmsapi listmsie listmsiis listmsnt listmspatch listmsscript listmsvb listmsvc memo ms msde mysql netbeans oraPlsql oracle oracleWiper oraclehelper orafunc other panoramio pear perl personal pgdojo pgdojo_cal pgdojo_holiday pgdojo_idx pgdojo_ref pgdojo_req php phpVarious phpguide plsql postgres ps r205 realC realwebapp regex rgaki ruby rule sboard sc scprint scquest sdb sdbquest seesaa setup sh_Imagick sh_canvas sh_dotnet sh_google sh_tool sh_web shadowbox shgm shjquery shvbs shweb sjscript skadai skywalker smalltech sperl sqlq src systemdoc tcpip tegaki three toolbox twitter typeface usb useXML vb vbdb vbsfunc vbsguide vbsrc vpc wcsignup webanymind webappgen webclass webparts webtool webwsh win8 winofsql wmi work wp youtube