收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
积木学院 > 网页设计 > Flash > 正文

Flash与Asp的结合应用实例之一 论坛的实现(上)

来源:互联摘选 日期:2007-12-13 17:19
在上一篇教程《Flash 与 Asp 的结合使用》中我们介绍了Flash与Asp结合应用的原理,现在我们就来看看两者结合应用的实例――论坛的实现。先来看看实例的效果,有登陆、查看主题、查看具体内容、发表新主题、删除等功能,在本实例上面稍做修改,就是一个比较完善的论坛了。下面我们按顺序来一项一项实现论坛的功能。

  一 、登陆部分

  登陆部分的基本原理是:在Flash端输入用户名和密码,通过Asp查询数据库,如果用户名和密码正确,就跳转到登陆成功界面,否则就跳转到登陆失败界面。

  A、 Asp部分

  新建一个空白文件,命名为Login.asp,内容如下:
<%
username = request("username")
userpwd = request("userpwd")
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Driver={SQL Server};SERVER=192.168.1.32;DATABASE=pywz" '注释1
set rs=Server.CreateObject("ADODB.Recordset")
strSql="select * from UserInfo where userid='" & username & "' and password='" & userpwd & "'"
rs.open strSql,conn, 1, 1
if not(rs.bof and rs.eof) then ‘注释2
Response.Write ("userlogin=success")
Else
Response.Write ("userlogin=unsuccess")
end if
rs.close
conn.close
%>

  注释1所在的行是针对SQL SERVER的连接字符串,要根据自己设置的数据库的不同,做相应的改动。如果用其他的数据库的时候,适当改动此字符串即可。如常见的ACCESS数据库的连接串如下:

strConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=路径\xx.mdb"
(注:Access 97,这里是按文件放置路径连接,如:c:\wwwroot\data\bbs.mdb)
strConnString = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("地址/xx.mdb")"
(注:Access 97,这里是按地址连接,如:data/bbs.mdb)
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=路径\xx.mdb;"
(注:Access 2000)
strConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("地址/xx.mdb")

(注:Access 2000)

  注释2为当登陆成功时返回userlogin的值为success,否则为unsuccess。

  B、 Flash部分

  1、在属性面板上,将第一帧的“帧标签”设为“login”。在第一帧的Action面板中加上:
Stop();

  2、如图1所示,在场景中放置两个文本框,两个button,其中上面一个文本框的设置如图2所示,另一个文本框的设置如图3所示。

图01

图02

图03

  3、新建一个组件,命名为“loginloop”,在第一帧的Action面板中加上下面语句:

_root.count = 0;
stop();

  在第5帧上插入关键帧,在Action面板上加入下面的语句:

if (!(_root.userlogin)) {
_root.count = _root.count + 1;
if (_root.count > 50)
{
_root.gotoAndPlay("netfalse");
_root.loginloop.gotoAndStop(1);
}
_root.loginloop.gotoAndPlay(2);
}
if (_root.userlogin == "success")
{
_root.gotoAndPlay("main");
_root.loginloop.gotoAndStop(1);
}
if (_root.userlogin == "unsuccess")
{
_root.gotoAndPlay("loginfalse");
_root.loginloop.gotoAndStop(1);
}

  上面第一个if语句是判断userlogin这个值是否已经从服务器端传过来,如果没有的话,就继续循环等待,当循环到一定的时候,就跳转到出错界面。第二个if语句是登陆成功,跳转到显示主题界面。第三个if语句是登陆不成功,跳转到登陆失败界面。

  4、将组件“loginloop”从图库中拖到场景中,将其实例名设为“loginloop”。

  5、、在场景中登陆Button的Action面板中增加下面的语句:

on (release) {
if (length(_root.username) == 0) {
_root.username = "请输入名字";
} else if (length(_root.userpwd) == 0) {
_root.username = "请输入密码";
}
if ((length(_root.username) != 0)and (length(_root.userpwd) != 0)) {
loadVariables("login.asp?username=" add _root.username add "&userpwd=" add _root.userpwd, this, "POST");
_root.loginloop.gotoAndPlay(2);
}
}

  这是向服务器端发送请求,同时让“loginloop”开始循环。

  6、在主场景中的第5帧中插入关键帧,将此帧命名为“loginfalse”,此帧场景中的布局如图4所示。在帧的Action面板中增加下面的语句:

图04

stop();
在“返回”Button的Action面板中增加下面的语句:
on(release){
_root.gotoAndStop("login");
}

  这是登陆出错时显示的界面。

  C、 小结与提高

  登陆部分功能就算完成, Flash部分的第3步和第5步是比较关键,也是比较常用的技巧。其中第3步又可以采用定时的方法来实现,在一个时间段中不断检查是否已经有返回值,根据相应的条件处理各种流程。

  二、查看主题部分

  查看主题部分的原理为:向服务器段发送请求,取得相应的返回值后,显示在对应的文本框中,并控制相应元素的显示情况。

  A、 Asp部分

  新建一个空白文件,命名为issue.asp,内容如下:

<%
num = 0
nowpage = request("nowpage")
if nowpage = "" then
nowpage = 1
end if
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Driver={SQL Server};SERVER=192.168.1.32;DATABASE=pywz" ‘注释1
set rstemp=Server.CreateObject("ADODB.Recordset")
rstemp.cachesize = 5
sqltemp="select * from BbsInfo order by ID"
rstemp.open sqltemp,conn, 1, 1
if not(rstemp.bof and rstemp.eof) then
rstemp.MoveFirst
rstemp.pagesize = 8 ‘注释2
maxpage=cint(rstemp.pagecount)
rstemp.absolutepage=nowpage
'nowpage maxpage sub1 author1 sub2 author2 ...... subN authorN num
response.Write("nowpage=" & nowpage & "&")
response.Write("maxpage=" & maxpage & "&")
do while not rstemp.EOF and num < rstemp.pagesize
if len(trim(rstemp("Title"))) >27 then ‘注释3
strTitle = Mid(trim(rstemp("Title")),0,27) + "..."
else
strTitle = trim(rstemp("Title"))
end if
response.Write("author" & num & "=" & trim(rstemp("Author")) & "&" & "id" & num & "=" & trim(rstemp("ID")) & "&" &"sub" & num & "=" & strTitle & "&")
num = num + 1
rstemp.MoveNext
loop
response.Write("num=" & num)
end if
rstemp.close
conn.close
%>

  其中注释1是数据库的连接字符串,如何改动可参见第一部分。注释2是设定每一次发送的记录条数为8条。注释3所在是控制发送的标题的字符长度小于27个。

  B、 Flash部分

  1、在主场景的第10帧上插入关键帧,将此帧命名为“mian”,场景中的布局如图5所示。在此帧的Action面板中增加如下语句:

图05


loadVariables("issue.asp", this, "POST"); ‘注释1
setProperty("_root.pageload", _visible, "1"); ‘注释1
setProperty("_root.pagedown", _visible, "0");
setProperty("_root.pageup", _visible, "0");
setProperty("_root.sb0", _visible, "0");
setProperty("_root.sb1", _visible, "0");
setProperty("_root.sb2", _visible, "0");
setProperty("_root.sb3", _visible, "0");
setProperty("_root.sb4", _visible, "0");
setProperty("_root.sb5", _visible, "0");
setProperty("_root.sb6", _visible, "0");
setProperty("_root.sb7", _visible, "0");
setProperty("_root.db0", _visible, "0");
setProperty("_root.db1", _visible, "0");
setProperty("_root.db2", _visible, "0");
setProperty("_root.db3", _visible, "0");
setProperty("_root.db4", _visible, "0");
setProperty("_root.db5", _visible, "0");
setProperty("_root.db6", _visible, "0");
setProperty("_root.db7", _visible, "0");
_root.su0 = "";
_root.su1 = "";
_root.su2 = "";
_root.su3 = "";
_root.su4 = "";
_root.su5 = "";
_root.su6 = "";
_root.su7 = "";
_root.au0 = "";
_root.au1 = "";
_root.au2 = "";
_root.au3 = "";
_root.au4 = "";
_root.au5 = "";
_root.au6 = "";
_root.au7 = "";
_root.textnum = "";
stop();

  注释1为向服务器发送请求,注释2以下部分为初始化场景中的各个控件。

  2、将场景中所有的文本框的类型都设置为“动态文本”,将“主题”下面的文本框变量依次命名为su0、su1、su2、su3、su4、su5、su6、su7。将“作者”下面的文本框变量依次命名为au0、au1、au2、au3、au4、au5、au6、au7。

  3、新建一个组件,命名为“issueloop”,在组件的第一帧的Action面板上加入如下语句:

_root.count = 0;
stop();

  在第五帧上插入关键帧,在Action面板上插入如下语句:

if (!(_root.num)) { ‘注释1
_root.count = _root.count+1;
// _root.su0 = "num1 = " add _root.num;
if (_root.count>50) {
_root.gotoAndPlay("netfalse");
_root.issueloop.gotoAndStop(1);
_root.count =0;
}
_root.issueloop.gotoAndPlay(3);
} else { ‘注释2
if (_root.num>=1) {
_root.su0 = _root.sub0;
_root.au0 = _root.author0;
setProperty("_root.sb0", _visible, "1");
setProperty("_root.db0", _visible, "1");
}else
{ _root.su0 = "";
_root.au0 = "";
setProperty("_root.sb0", _visible, "0");
setProperty("_root.db0", _visible, "0");
}
if (_root.num>=2) {
_root.su1 = _root.sub1;
_root.au1 = _root.author1;
setProperty("_root.sb1", _visible, "1");
setProperty("_root.db1", _visible, "1");
}else {
_root.su1 = "";
_root.au1 = "";
setProperty("_root.sb1", _visible, "0");
setProperty("_root.db1", _visible, "0");
}
if (_root.num>=3) {
_root.su2 = _root.sub2;
_root.au2 = _root.author2;
setProperty("_root.sb2", _visible, "1");
setProperty("_root.db2", _visible, "1");
}else
{ _root.su2 = "";
_root.au2 = "";
setProperty("_root.sb2", _visible, "0");
setProperty("_root.db2", _visible, "0");
}

if (_root.num>=4) {
_root.su3 = _root.sub3;
_root.au3 = _root.author3;
setProperty("_root.sb3", _visible, "1");
setProperty("_root.db3", _visible, "1");
}else {
_root.su3 = "";
_root.au3 = "";
setProperty("_root.sb3", _visible, "0");
setProperty("_root.db3", _visible, "0");

}
if (_root.num>=5) {
_root.su4 = _root.sub4;
_root.au4 = _root.author4;
setProperty("_root.sb4", _visible, "1");
setProperty("_root.db4", _visible, "1");
}else {
_root.su4 = "";
_root.au4 = "";
setProperty("_root.sb4", _visible, "0");
setProperty("_root.db4", _visible, "0");
}
if (_root.num>=6) {
_root.su5 = _root.sub5;
_root.au5 = _root.author5;
setProperty("_root.sb5", _visible, "1");
setProperty("_root.db5", _visible, "1");
}else {
_root.su5 = "";
_root.au5 = "";
setProperty("_root.sb5", _visible, "0");
setProperty("_root.db5", _visible, "0");

}

if (_root.num>=7) {
_root.su6 = _root.sub6;
_root.au6 = _root.author6;
setProperty("_root.sb6", _visible, "1");
setProperty("_root.db6", _visible, "1");
}else{ _root.su6 = "";
_root.au6 = "";
setProperty("_root.sb6", _visible, "0");
setProperty("_root.db6", _visible, "0");
}
if (_root.num>=8) {
_root.su7 = _root.sub7;
_root.au7 = _root.author7;
setProperty("_root.sb7", _visible, "1");
setProperty("_root.db7", _visible, "1");
}
else {
_root.su7 = "";
_root.au7 = "";
setProperty("_root.sb7", _visible, "0");
setProperty("_root.db7", _visible, "0");
}
_root.textnum = "共" add _root.maxpage add "页,此第" add _root.nowpage add "页"; ‘注释3
if (_root.maxpage<=1) {
setProperty("_root.pagedown", _visible, "0");
setProperty("_root.pageup", _visible, "0");
}
if (_root.maxpage>1) {
if (_root.nowpage<_root.maxpage) {
setProperty("_root.pagedown", _visible, "1");
} else {
setProperty("_root.pagedown", _visible, "0");
}
if (_root.nowpage>1) {
setProperty("_root.pageup", _visible, "1");
} else {
setProperty("_root.pageup", _visible, "0");
}
}
_root.issueloop.gotoAndStop(1);
_root.count =0;
}

  此Action的前半部分是控制内容的显示,最后几个if语句是控制翻页Button的显示。其中注释1部分为检查是否已经有返回值,未返回则继续循环。注释2部分是根据返回的记录条数处理记录的显示情况。注释3部分是根据记录的条数和返回的记录条数来控制上一页/下一页按钮的显示情况。

  4、将组件“issueloop”拖到场景中,命名为“issueloop”。

  5、将“下载”Button命名为“pageload”,在其Action面板上增加下面的语句:

on (release)
{_root.issueloop.gotoAndPlay(2);
setProperty("_root.pageload", _visible, "0");
}

  这是让issueloop开始循环。将其放在button的Action上面是为了能让大家更清楚的看到效果,一般可以将其放置在帧的触发事件中,这样就可以自动开始循环。

  6、将“上一页”Button命名为“pageup”,在其Action面板上增加下面的语句:

on (release){
loadVariables("issue.asp?nowpage=" add (Number(_root.nowpage) - 1), this, "POST");
_root.issueloop.gotoAndPlay(2);
}

  将“下一页”Button命名为“pagedown”,在其Action面板上增加下面的语句:

on (release){
loadVariables("issue.asp?nowpage=" add (Number(_root.nowpage) + 1), this, "POST");
_root.issueloop.gotoAndPlay(2);
}

  将两个Button之间的文本框的变量命名为“textnum”,文本类型为“动态文本”。

  上一页、下一页的Action其实也就是再向服务器端发送“查看主题”的请求,只是发送的nowpage这个参数不同而已。

  C、 小结与提高

  查看主题部分完成了,原理不会非常复杂,但实现起来有点繁琐,这是论坛比较复杂的部分。其中在Asp的实现部分比较有技巧,只是传送了一个nowpage参数,就可以实现分页的效果。

(出处:www.Gimoo.net)

推荐阅读

 

热点信息

 
强悍的草根IT技术社区,这里应该有您想要的!
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号