分享
 
 
 

关于FLASH留言板的详细教程

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

基于网页的留言板,我们已经见得很多,一个完整的留言板包括三个部分:

1. 显示留言的页面(显示朋友们给我的留言)

2. 填写留言的页面 (向后台提交信息)

3. 数据库(用于保存后台信息)

关于如何制作基于网页的留言板,不去多作解释,可以参考相关资料。

就目前而言,FLASH是不可以直接操作象ACCESS, SQL, Mysql 等数据库的,他只能依靠ASP ,PHP ,JSP等其他的语言来实现数据的提交和查询。同时,FLASH还可以和XML对接,实现一些数据的操作。

FLASH和ASP的交互:

无论是ASP,PHP还是JSP等其他语言,原理大都一样,本人对ASP熟悉一点,所以以下只讲解FLASH与ASP的对联;

查看FLASH的帮助文件,可以找到好几种的交互方法,

本人使用最多的还是:

loadVariablesNum(url:String, level:Number, [method:String]) : Void

loadVariablesNum(参数1,参数2,参数3),参数1为变量所处位置的绝对或相对 URL,参数2为一个整数,指定 Flash Player 中接收这些变量的级别

参数3为发送变量的 HTTP 方法,常用的有"get"和"POST",推荐使用"POST"方法。

例1:新建一个flash文件,拖一个可输入的文本框组件,取实例名为name_txt,再拖入一个按钮组件到场景中,取实例名为send_btn,在第一帧上写

_root.send_btn.onRelease=function()

{

if(_root.name_txt.text!="")

{

myname=_root.name_txt.text;

loadVariablesNum("write.asp",0,"POST");

}

}

那么,测试影片后,在文本框中,输入一个不为空的字符后,点击发送按钮后,输入的内容,将被提交到同一个文件夹中的名为"write.asp"中去!

write.asp通过Request.Form("myname")的方法,就可以得到提交过来的数据,这里就简单的实现了 FLASH向ASP提交数据。

接下来看看FLASH如何从ASP读数据:

例2:新建一个flash文件,拖一个动态文本框组件到场景中,取实例名为read_txt,在第一帧上写

loadVariablesNum("read.asp",0,"POST");

_root.read_txt.text=myname;

理论上测试后,read_txt文本框会显示read.asp提交过来的myname中的值,但是有时候不能够保持实时性,常常得不到数据,相信也有许多朋友

会遇到同样的问题,这里讲两个小技巧。

技巧一:

首先可以在FLASH初一个变量为 active_old=0; 在ASP中Response.Write("active_new=1")

那么FLASH里可以写上:

active_old=0;

_root.onEnterFrame=function()

{

loadVariablesNum("read.asp",0,"POST");

_root.active_old=active_new;

_root.read_txt.text=myname;

if(_root.active_old==1)

{

delete_root["onEnterFrame"];

}

}

此段代码表示,开始FLASH会不断地访问read.asp,read.asp会把变量active_new传递给FLASH中的_root.active_old,当_root.active_old改变后,

将停止事件。

技巧二:

使用loadVariablesNum("read.asp?temp="+random(10000),0,"POST");的方式,在每次访问时会得到最新的数据,不会再使用缓存中的信息。

关于ASP中的代码如何书写,不再多作解释,重点讲解FLASH如何准确和及时得到数据库里的数据,达到我们期望的功能。

[备注]

我们常会遇到,中文提交到数据库后,数据显示出来为乱码,主要是由于编码的原因,只要在ASP中写上 codePage=”936”%>

FLASH和XML的交互

应该来说,用XML和FLASH来交换数据,还是不错的选择,首先,XML可以根据我们的需要,很清晰地定义其结构,FLASH也可以很容易去解释信息。

例3:

myxml=newXML();//创建一个XML新对象

myxml.ignoreWhite=true;//空白忽略

myxml.load(“music.xml”);//加载同目录下的music.xml文件

myxml.onLoad=function(success)

{

if(success)

{

ReadXML();

trace(“加载成功”);

}else

{

trace(“加载失败”);

}

}

以上的代码就能够检测xml是不是加载到FLASH中去了。

以下是个简单的XML文件

name=”song1”url=”mp3/01.mp3”/>

name=”song2”url=”mp3/02.mp3”/>

name=”song3”url=”mp3/03.mp3”/>

XML加载进来后,我们需要做的是去解析和提取数据,为我们所用。

以上ReadXML()函数就用来读数据。

FunctionReadXML()

{

myArray=myxml.firstChild.childNodes;//把myxml的第一个子结点所有的数据以数组的方式给myArray

totalNumber=myArray.length;//

for(i=0;i<totalNumber;i++)

{

arr_1=myArray[i].attributes.name;

arr_2=myArray[i].attributes.url;

}

}

现在,我们可以得到的结果是,在数组arr_1中保存了所有歌曲的名字,在数组arr_2中保存了所有歌曲的路径,我们就可以使用loadSound()等方法制作一个自己的播放器了!

XML与ASP

Xml和ASP各有各的优势,xml数据结构很清楚,但是没有ASP灵活,而且还可以查询和修改数据库,所以想一想,如果用ASP来动态生成xml,那么我们就可以两全其美了!

这里需要一点ASP知识!

以下一段实现ASP生成指定的XML。

response.ContentType="text/xml"

ifrequest.QueryString("Page")<>""then

Page=Cint(request.QueryString("Page"))

else

Page=1

endif

pgsz=5

%>

DataBaseName="Manage/Message/Message.mdb"

SetConn=Server.CreateObject("ADODB.Connection")

Conn.Open"DRIVER={MicrosoftAccessDriver(*.mdb)};DBQ="&Server.MapPath(DataBaseName)

setrs=server.CreateObject("Adodb.recordset")

rs.open"Select*fromMessageorderbyaddtimedesc",conn,1,1

ifnotrs.eofthen

rs.pagesize=pgsz

Rs.Absolutepage=Page

%>

"Pagecount=""PageSize=""Recordcount="">

i=0

dowhilenotrs.eofandi

%>

"Sex=""Email=""Time="--"Homepage=""Title=""Content=""Reply=""/>

i=i+1

rs.movenext

loop

%>

endif

rs.close

setrs=nothing

Conn.Close

setConn=Nothing

%>

[备注]

我们常会遇到,XML中如果有中文,将会成乱码,所以只要在flash中写上

System.useCodePage=true,就OK了!

以上只是些基础知识,下面具体讲解留言板的制作和关键:

效果地址:http://www.u-lee.com/bbs.htm

是我的第一个版本的留言板

留言板主要包括以下功能:游戏,留言(提交留言),播放音乐(mp3),管理功能(删除留言)

使用到的技术:AS,ASP,XML, database

需要解决的技术问题:

1.留言内容的分页显示,

2,使用List组件显示歌曲列表,列表使用XML动态更新,

3,使用ScrollPan组件存放留言内容,当有新的留言内容产生时,自动调整位置,最新留言置顶,

4,加载声音文件,如何实现播放完一首歌曲后,自动换到下一首,

5,删除留言自动调整页面。

原理是把所有的数据用ASP提取出来,然后由FLASH来判断,使用split方法,把数据存到数组里去,需要时,再去取,这样有一个弱点,就是使用起来,分页时,会把不需要的数据也调用了进来,不是很科学!

接下来讲的是改进后的版本。原理是用ASP动态生成XML,当分页时,点下一页时,继续访问ASP,从新生成第二页的XML,都由FLASH访问XML,来加载数据,由ASP访问数据库,读和写数据。

V2.0版本中FLASH原文件共有3个,leave.swf只是个容器,把write.swf和leave.swf加载到里面去。

write.swf为提交数据,read.swf为读数据.

leave.swf:

两个按钮,一个查看留言btn1一个我要留言.btn2

btn1:_parent.mess.loadMovie("read.swf");

btn2:_parent.mess.loadMovie("write.swf");

其中还有,上一页和下一页以及一个下拉条

主要代码:

xiala.onEnterFrame=function(){//下拉的位置,控制着留言内容mess的位置

if(ggg==1){

mess._y=28;

}else{

y=xiala.btn._y;

yy=y/dist1;

mess._y=b_2*yy+30;

}

};

write.swf

(图片见word文档)

主要代码:

System.useCodepage=true;//支持中文编码

this_mc._visible=false;//this_mc为一个填写错误提示的影片剪辑

this_sex="先生";//默认sex为先生

functionclean(){//点取消按钮时,清空所有数据

this_name.text="";

this_homepage.text="";

this_email.text="";

this_title.text="";

this_content.text="";

}

functionemailcheck(str){//检测email填写是否正确,判断是否有@和点

at=false;

dot=false;

for(i=0;i

if(str.charAt(i)==’@’){

at=true;

}

if(str.charAt(i)==’.’){

dot=true;

}

}

return(at&&dot);

}

clean_btn.onRelease=function(){

clean();

};

send_btn.onRelease=function(){//提交按狃代码

if(this_name.text==""){

this_mc._visible=true;

this_mc.tishi.text="姓名不能为空!";

}elseif(emailcheck(this_email.text)==false){

this_mc._visible=true;

this_mc.tishi.text="请正确填写邮件!";

}elseif(this_title.text==""){

this_mc._visible=true;

this_mc.tishi.text="主题不能为空!";

}elseif(this_content.text==""){

this_mc._visible=true;

this_mc.tishi.text="内容不能为空!";

}else{

myName=this_name.text;

myHomepage=this_homepage.text;

if(myHomepage==""){

myHomepage="http://www.u-lee.com";

}

myEmail=this_email.text;

myTitle=this_title.text;

myContent=this_content.text;

mySex=this_sex;

trace(myName);

trace(myHomepage);

trace(myEmail);

trace(myTitle);

trace(myContent);

trace(mySex);

loadVariablesNum("write.asp",0,"POST");//如果填写的数据全部合格,将提交数据到write.asp

_parent.page_num=1;

_parent.prev_btn._visible=false;

_parent.txt._visible=true;

_parent.xiala._visible=true;

_parent.next_btn._visible=true;

_parent.btn2.gotoAndStop(1);

_parent.btn1.gotoAndStop(2);

_parent.ggg=0;

_parent.mess.unloadMovie();

_parent.mess.loadMovie("read.swf");//提交后,自动转入显示留言的页面

}

};

listenerObject_1=newObject();//侦听事件,如果选择了"先生"则this_sex="先生";

listenerObject_1.click=function(eventObject){

this_sex="先生";

};

listenerObject_2=newObject();

listenerObject_2.click=function(eventObject){//侦听事件,如果选择了"先生"则this_sex="女士";

this_sex="女士";

};

sex_1.addEventListener("click",listenerObject_1);

sex_2.addEventListener("click",listenerObject_2);

stop();

read.swf

以上是一个空影片剪接,用于放置留言信息,想想假如我想每页显示5个,那么我需要复制5个这样的影片,放到场景中,再把从xml中的提取出来的数据注入到每个影片中的1-5个动态文本框中去.

如何读数据,上面已经讲过了,现在只要把数据赋给动态文本框中就可以了.需要注意的是,我们选用的是自定义的文本框,首先确保他是多行的并且是自动换行的,所以我们考虑的是,文本框的高度必须根据内容的多少来显示。以下代码就可以实现:

scroll_1=this.message_load_mc["message_mc"+i].content_txt.maxscroll;//取得内容的最大滚动量

this.message_load_mc["message_mc"+i].content_txt._height=scroll_1*18;

//一行文本,如果是12号字大约是18px,那么*18后,就可以得到content_txt._height了

回复同样也是这样另外,低色的高度也要根据上面内容来确定。

this.message_load_mc["message_mc"+i].back_2._y=this.message_load_mc["message_mc"+i].back_1._y+this.message_load_mc["message_mc"+i].back_1._height+2

//得到back_2._y坐标。

完整的代码:

stop();

System.useCodepage=true;

//现在是第几页,由_root里的this_nowpage来传给它,在场景中定义

this_nowpage=_parent.page_num;

temp=0;

read_xml=newXML();

read_xml.ignoreWhite=true;

read_xml.load("DataSource.asp?Page="+this_nowpage+"&"+Math.random(10000));

//刷新DataSource.asp,保证不使用缓存里的数据

read_xml.onLoad=function(success){

if(success){

trace("OK");

parseXML();

}else{

trace("加载失败");

}

};

functionparseXML(){

name_arr=newArray();

sex_arr=newArray();

email_arr=newArray();

time_arr=newArray();

homepage_arr=newArray();

title_arr=newArray();

content_arr=newArray();

reply_arr=newArray();

total_arr=newArray();

total_arr=read_xml.firstChild.firstChild.childNodes;

//---------总记录数-------

totalRecord=read_xml.firstChild.firstChild.attributes.Recordcount;

//---------总页数---------

totalPage=read_xml.firstChild.firstChild.attributes.Pagecount;

_parent.total_1=totalPage;

//---------当前页数--------

now_Page=read_xml.firstChild.firstChild.attributes.CurPage;

//---------每页显示记录数-------

page_size=read_xml.firstChild.firstChild.attributes.PageSize;

trace(totalRecord);

trace(totalPage);

trace(now_Page);

for(i=0;i

name_arr[i]=total_arr[i].attributes.Name;

sex_arr[i]=total_arr[i].attributes.Sex;

email_arr[i]=total_arr[i].attributes.Email;

time_arr[i]=total_arr[i].attributes.Time;

homepage_arr[i]=total_arr[i].attributes.Homepage;

title_arr[i]=total_arr[i].attributes.Title;

content_arr[i]=total_arr[i].attributes.Content;

reply_arr[i]=total_arr[i].attributes.Reply;

}

showmessage();

}

functionshowmessage(){

_parent.txt._visible=true;

_parent.txt.total_txt.text="一共有"+totalRecord+"记录";

_parent.txt.nowpage_txt.text=this_nowpage+"/"+totalPage;

for(i=0;i

this.message_load_mc.attachMovie("message_mc","message_mc"+i,i);

this.message_load_mc["message_mc"+i].name_txt.text=name_arr[i]+"("+sex_arr[i]+")";

this.message_load_mc["message_mc"+i].title_txt.text=title_arr[i];

this.message_load_mc["message_mc"+i].content_txt.text=content_arr[i];

this.message_load_mc["message_mc"+i].reply_txt.text=reply_arr[i];

trace(this.message_load_mc["message_mc"+i].reply_txt.text);

this.message_load_mc["message_mc"+i].time_txt.text=time_arr[0];

this.message_load_mc["message_mc"+i].back_2._y=this.message_load_mc["message_mc"+i].back_1._y+this.message_load_mc["message_mc"+i].back_1._height+2;

scroll_1=this.message_load_mc["message_mc"+i].content_txt.maxscroll;

this.message_load_mc["message_mc"+i].content_txt._height=scroll_1*18;

this.message_load_mc["message_mc"+i].back_2._height=this.message_load_mc["message_mc"+i].content_txt._height+15;

scroll_2=this.message_load_mc["message_mc"+i].reply_txt.maxscroll;

this.message_load_mc["message_mc"+i].reply_txt._height=scroll_2*18;

if(this.message_load_mc["message_mc"+i].reply_txt.text==""){

this.message_load_mc["message_mc"+i].back_3._height=30;

}else{

this.message_load_mc["message_mc"+i].back_3._height=this.message_load_mc["message_mc"+i].reply_txt._height+10;

}

this.message_load_mc["message_mc"+i].back_3._y=this.message_load_mc["message_mc"+i].back_2._y+this.message_load_mc["message_mc"+i].back_2._height+2;

this.message_load_mc["message_mc"+i].txt_1._y=this.message_load_mc["message_mc"+i].back_3._y+5;

this.message_load_mc["message_mc"+i].reply_txt._y=this.message_load_mc["message_mc"+i].txt_1._y;

this.message_load_mc["message_mc"+i]._x=0;

this.message_load_mc["message_mc"+i]._y=temp;

temp=temp+this.message_load_mc["message_mc"+i]._height+15;

this.message_load_mc["message_mc"+i].btn1.onRelease=function(){

homepage_num=Number(this._parent._name.slice(10));

str_1=homepage_arr[homepage_num];

getURL(str_1,"_blank");

};

this.message_load_mc["message_mc"+i].btn2.onRelease=function(){

email_num=Number(this._parent._name.slice(10));

str_2=email_arr[email_num];

getURL("mailto:"+str_2);

trace(str_2);

};

}

trace("++++++++++++++++"+this._height);

_parent.b_2=-1*this._height+250;

}

以上的所有的操作,测试时需要在ASP环境下。

以上如果有不确当的术语,请谅解!

感谢您阅读我的心得!谢谢!

可以把“FLASH留言板原文件”中的内容全拷到ASP环境下

如http://127.0.0.1/web/index.html就可以了

文件夹中提供了后台管理系统供大家学习和测试flash.rar

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有