Flash+PHP+MySQL留言板教程
实例演示地址:http://www.52totem.com/test/liuyan.html(下面有附件下载)如果想问什么是PHP的话,百度一下吧,再百度一下“如何配置PHP环境”,满地都是教程。
FLASH不能直接操作文件与数据库,于是就得通过PHP的行为来间接操作。留言板实现原理很表现了Flash做web开发的基本方式。动态脚本用JSP,ASP也都可以的,它们的功能就是从FLASH接收数据,然后写入文件或数据库,再将数据库给读取出来。这里以PHP为例。
这个留言板的基本原理:FLASH里填入数据,然后执行对外发送脚本;PHP即接收FLASH发送来的数据,经过整理加工,写入数据库,然后将数据库里的数据读取出来,输出成XML格式文档;FLASH再动态加载这个XML格式的PHP。
那么开始吧→_→【ps:下面的代码是基于对AS3有相对扎实了解的,可能还需要读者认真阅读,我已经尽量写了注释了】
首先是PHP,PHP从FLASH里一次接收这三个变量:inputName,inputContact,inputMessage。
这个是PHP文档,文件名是comments.php。需要确定已经建立好数据库,这里示例数据库是totem,表是comments,表规格是这样:(ID SMALLINT, SHIJIAN DATETIME, IP CHAR(15), NAME CHAR(20), CONTACT CHAR(20), MESSAGE CHAR(100), REPLY CHAR(100))。
[*]
接下来是AS3的脚本,有附件,是FLASH CS5 的。没有写文档类,代码写在幁上了
[*]import flash.net.URLRequest;
[*]import flash.net.URLLoader;
[*]import flash.events.MouseEvent;
[*]import flash.events.Event;
[*]
[*]var url:URLRequest = new URLRequest("http://www.hyieq.com/phps/comments.php");
[*]//上面的new URLRequest里就是要连接的php文件的位置,注意协议http,上面的只是示例位置。
[*]var loader:URLLoader = new URLLoader;
[*]sendBtn.addEventListener(MouseEvent.CLICK,sendClick);
[*]var forbidChar:RegExp = new RegExp("[#&|*]");
[*]//这里用正则表达式来过滤一些不被允许的特殊字符
[*]function sendClick(e:MouseEvent)
[*]{
[*] //这个函数事先判断一下用户输入的是否含有非法字符
[*] if (inputName.text.match(forbidChar))
[*] {
[*] warning.text = "称呼含有非法字符,请重输";
[*] }
[*] else if (inputName.text=="")
[*] {
[*] warning.text = "称呼不能为空";
[*] }
[*] else if (inputContact.text.match(forbidChar))
[*] {
[*] warning.text = "联系方式含有非法字符,请重输";
[*] }
[*] else if (inputContact.text=="")
[*] {
[*] warning.text = "联系方式不能为空";
[*] }
[*] else if (inputMessage.text.match(forbidChar))
[*] {
[*] warning.text = "留言含有非法字符,请重输";
[*] }
[*] else if (inputMessage.text=="")
[*] {
[*] warning.text = "留言不能为空";
[*] }
[*] else
[*] {
[*] //如果都没问题了,则执行提交动作:
[*] warning.text = "提交中......";
[*] sendVars();
[*] }
[*]}
[*]function sendVars()
[*]{
[*] //这个函数就是执行发送任务了
[*] System.useCodePage = true;
[*] //关键句1:
[*] var variables:URLVariables=new URLVariables();
[*] variables.username = inputName.text;
[*] variables.usercontact = inputContact.text;
[*] variables.usermessage = inputMessage.text;
[*] //关键句2:
[*] url.method = "post";
[*] url.data = variables;
[*] //关键句3:
[*] loader.load(url);
[*] loader.addEventListener(Event.COMPLETE,loaded);
[*] //上面这句其实是整个发送的配套动作,AS3里发送与读取是要一块执行的
[*] pageNum = 1;
[*]}
[*]var myXML:XML;
[*]var pageNum:int = 1,pageTotal:int,pagePerNum:int;
[*]
[*]function loaded(e:Event)
[*]{
[*] //等待完成加载动作后,其实就可以直接读取PHP里生成的XML格式文档了
[*] showPage.text = pageNum + "/" + pageTotal;
[*] inputName.text = "";
[*] inputContact.text = "";
[*] inputMessage.text = "";
[*] warning.text = "完成!";
[*] myXML = new XML(e.currentTarget.data);
[*] pageTotal = int(myXML.zongyeshu);
[*] pagePerNum = int(myXML.yetiaoshu);
[*] showPage.text = pageNum + "/" + pageTotal;
[*] loadList();
[*]}
[*]function loadList()
[*]{
[*] //加载顺序留言列表
[*] for (var i:int=0; i 1 ? pageNum--:0;
[*] showPage.text = pageNum + "/" + pageTotal;
[*] loadList();
[*]}
[*]function downclick(e:MouseEvent)
[*]{
[*] pageNum < pageTotal ? pageNum++:0;
[*] showPage.text = pageNum + "/" + pageTotal;
[*] loadList();
[*]}
[*]function defaultLoad()
[*]{
[*] //默认没发送数据的情况加载一次留言列表
[*] System.useCodePage = true;
[*] warning.text = "加载中...";
[*] loader.load(url);
[*] loader.addEventListener(Event.COMPLETE,loaded);
[*]}
[*]defaultLoad();
然后上传到自己的本地服务器测试一下吧,祝读者成功!
下面是附件(这个附件是不能直接运行的,里面是写好的代码而已,还需要自己配置好环境和MySQL,按上例做的话才可测试):
页:
[1]