注册
 找回密码
 注册
江西广告网
查看: 698|回复: 0
打印 上一主题 下一主题

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

[复制链接]
  • TA的每日心情
    擦汗
    2016-12-6 16:04
  • 签到天数: 10 天

    [LV.3]偶尔看看II

    1
    跳转到指定楼层
    发表于 2007-4-27 00:23:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    D8888D贴子标题------------------------------------------------------- flash与asp的结合应用实例之一 论坛的实现(上) D8888D主贴内容-------------------------------------------------------   在上一篇教程《flash 与 asp 的结合使用》中我们介绍了flash与asp结合应用的原理,现在我们就来看看两者结合应用的实例――论坛的实现。先来看看实例的效果,有登陆、查看主题、查看具体内容、发表新主题、删除等功能,在本实例上面稍做修改,就是一个比较完善的论坛了。下面我们按顺序来一项一项实现论坛的功能。   一 、登陆部分   登陆部分的基本原理是:在flash端输入用户名和密码,通过asp查询数据库,如果用户名和密码正确,就跳转到登陆成功界面,否则就跳转到登陆失败界面。   a、 asp部分   新建一个空白文件,命名为login.asp,内容如下:   注释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,内容如下:   其中注释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参数,就可以实现分页的效果。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表