论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Flash教程
Tag:flash cs,flash 8,鼠绘,as,手绘,工具,文字,loading,入门,初学,mc,影片剪辑,声音,mtv,游戏,引导,遮罩,菜单,补间,广告条,时钟,视频教程

flash后台数据连接(PHP篇)之php&flash收藏夹---amfphp实现

文章类别:Flash | 发表日期:2008-9-21 20:09:13

  
继上篇http://space.flash8.net/bbs/thread-330867-1-4.html(后台数据连接(PHP篇)之php&flash收藏夹) 介绍了amfphp,想想,还是是加多一篇,当然,这是一个入门级的东西,大虾级的就不要笑话了。
说明:这里还是使用上一个的例子!用来实现一个收藏夹,改用amfphp来传递数组!这个例子中,并没有使用mysql,还是使用文本存的数据,下个看样子要写写这些了....
我的设想(流程):[与上例有改动]
1> 写入操作:填好数据到表单中,点按钮保存 -> 透过amfphp 呼叫php类中的函数append()直接写入文件favorite.dat中。
2> 读数据: 点刷新按钮 -> 通过amfphp读取全部的数据(数据还是上个例子一样,只是有一些差别) -> 返回到flash TextArea中,(因为TextArea支持简单的HTML,当然也包括<a href..
3> 删除:留给你的作业!
我的一些理解:
使用amfphp的理由,就是可以直接呼叫php中的类的函数,一般这样:
新建一个service
_global.svc = new Service(  
  "http://localhost/amfphp/gateway.php",
   myLogger,
   "favorite",
   null,
   null);
这里就可以使用。这里有我的php文件名是:favorite.php,其里面类的名称也是 class favorite{},然后:就可以var pcendingCall = svc.append(webname_txt.text,url_txt.text); //呼叫php中的append方法。pc.responder = new RelayResponder(this, "append_Result", "onError"); <-- 这里有响应append_Result处理,和对应的出错处理。下面有一个函数做为处理:append_Result = function(re:ResultEvent){  //添加按钮响应结果。
环境配置
一: php
我以本地做解释 apache2+php5,我用的是绿化版gggAPMserver。这个很方便使用,可以找一下,里面有mysql+php+apache。
二: amfphp的使用:
我用的是amfphp-1.1.2
1> 到http://www.amfphp.org/下载amfphp。
2> 我的是装在D:/gggAPMServer后会在D:中有一个www目录。
3> 解压后直接把amfphp放在www目录里,如图:
4> 下载本文后的样例tutor_favorite2.rar解压到www目录中。
5> 把tutor_favorite2中的(favorite.php),(favorite.dat)两个文件放入amfphp的services目录中。
6> 直接访问 即可看到效果:

好了,开始:
一: 打开上一个案例的favorite.fla,我用这个进行改装:保持下面几个不变。
1. 一个TextArea -> 我命名为: url_textarea。
  这里的属性我设置成了支持HTML,以便我的那些网址可以点击,有人问:为什么不用DataGrid啊,因为我还没有学会用。
2. 二个TextInput -> 命名为 : webname_txt 和 url_txt。
3. 三个Button -> 命名为: save_btn 和 refresh_btn。
4. 以及几个用作说明的label。
二: 打开代码写上:
import mx.remoting.Service;
import mx.services.Log;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
import mx.remoting.PendingCall; 
import mx.remoting.debug.NetDebug; 

import mx.controls.Alert; //加入Alert,以便弹出一个提示信息

//Initialize a Logger
mx.remoting.debug.NetDebug.initialize(); // initialize the NCD
var myLoggerog = new Log( Log.DEBUG, "logger1" );
// override the default log handler
myLogger.onLog = function( message:String ):Void {
trace( "myLogger-->>>"+message );
}

//设定全局Service
_global.svc = new Service(  
  "http://localhost/amfphp/gateway.php",
   myLogger,
   "favorite",
   null,
   null); 

/**
* 设定添加按钮的动作
*/
append_btn.onRelease = function(){
var pcendingCall = svc.append(webname_txt.text,url_txt.text); //呼叫php中的append方法
pc.responder = new RelayResponder(this, "append_Result", "onError");
webname_txt.text = url_txt.text = ""; //清空文本框
}
append_Result = function(re:ResultEvent){  //添加按钮响应结果
var id = re.result;
if(id != "error"){
  refresh_data(); //刷新数据
  mx.controls.Alert.show ("保存好了", "Debug Message", Alert.YES, _root, false, "prueba", Alert.OK);
}
else {
  mx.controls.Alert.show ("技术原因未成保存", "Debug Message", Alert.YES, _root, false, "prueba", Alert.OK);
}

}


/***
* 刷新按钮
*/
refresh_btn.onRelease = function(){
refresh_data();
}


/**
* 刷新数据
*/
function refresh_data(){
var pcendingCall = svc.get_data();
pc.responder = new RelayResponder(this, "getData_Result", "onError" );
}

/***
* 接收数据显示
*/
function getData_Result(re: ResultEvent){
url_textarea.text = re.result;
}


/***
* 出错 :-(
*/
function onError(rs: FaultEvent){
mx.remoting.debug.NetDebug.trace({level:"None", message:"There was a problem: " + fault.fault.faultstring });
}
refresh_data();  //初始数据
stop();
三:写那个favorite.php
我喜欢用的编辑器: editplus 介绍给大家使用。写入代码:
<?php

/***
* php & flash 收藏夹 之amfphp实现
*
* 这里要实现的功能是,用flash来展示和通过php来读写文本来
* 实现一个收藏夹的功能
*
* 数据的储存结构
* $name|$url|$date|&|$name|$url|$date....
*/


class favorite
{
var $df=’favorite.dat’; //存放数据
function favorite(){
  $this->methodTable = array(
   "get_data" => array(
    "description" => "Returns data",
    "access" => "remote", 
    "returntype" => "String" //返回数据为字符串
   ),
   "append" => array(
    "description" => "Inserts a Data",
    "access" => "remote",
    "arguments" => array ("name", "url") // 需要两个参数
   ),
  );
}


/**
* 实现添加的功能
* @ $name : 收藏的网站名
* @ $url : 网址
*/
function append($name,$url){
  $fp = fopen($this->df,"a+"); //添加模式
  $flag = fwrite($fp,"$name|$url|".time()."|&|"); //添加是否成功?
  fclose($fp);
  return $flag?"":"error";
}


/***
* 实现读取功能
* 返回:数组
*/
function get_data(){
  
  $fp = fopen($this->df,’r’);
  $tmpdata = fread($fp,filesize($this->df)); //全部读取
  fclose($fp);
  $detail= explode(’|&|’,$tmpdata); //分解数据
  for($i=0; $i<sizeof($detail)-1; $i++) {
   $out = explode(’|’,$detail[$i]); //再分一次就可以输出了
   $date=date("Y/m/D",$out[2]); //格式化日期
   $ret_data .= "<a href=’$out[1]’>$out[0]</a> - [$date]<br>"; //格式化数据了 <--- 这里与上一个例子不一样
  }
  return $ret_data;
}
}
?>
这里有一点:这里一这要记得建立一个favorite.dat,因为fopen(fp,'a+') ,这里的a+模式不能新建文件,所以你要建好! 下面是AD: 
http://www.oiasoft.com/ korpton's blog
http://www.celesteteam.com 我的工作组
谢谢!
另外还有一些数据传递方法:xml_socket,及fms可用,有爱好可与我一起讨论...
附件: tutor_favorite2.rar
视频教程列表
文章教程搜索
 
Flash推荐教程
Flash热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058