第12章 综合举例_第1页
第12章 综合举例_第2页
第12章 综合举例_第3页
第12章 综合举例_第4页
第12章 综合举例_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/1第12章综合举例第12章综合举例为了让读者对本教材的整体内容有一个概括的了解,本章设计了一个例子,所有基于Web的应用程序中一般都有这些内容。

本章的例子可以分成三部分内容:

即客户端表单,数据库操作,客户端初始数据生成。

以下分别讨论。

12.1客户端表单本实例用于向一个名单表中添加数据,名单数据表中包含系名、教研室名、姓名三个字段。

运行时首先显示如图12-1所示的表单,可以看出表单中包含两个下拉菜单和一个文本框。

图12-1初始状态的表单由于代码较长,为了便于解释,也是为了便于让读者分段验证它的正确性。

本章将实例的代码分成若干部分,每个例子中的代码只是整个代码中的一块。

本节主要讨论怎样显示一个供用户选择的表单。

它的代码分成以下各例。

【例12-1】变量说明部分HTMLHEADScriptlanguage=VBScriptdimxicount‘存放现有的系的个数dimlxi,ljys‘分别存放上一次输入时选择的系的序号和教研室的序号实例中为了方便于连续添加多个人员,把前一次添加时的系名和教研室名作为本次输入第12章综合举例239时的默认值。

【例12-2】定义下拉列表框中显示内容用的初始数据dimxiname(4)‘存放各系的名称dimjyscount(4)‘存放各系教研室的个数dimjysname(4,2)‘存放各系各教研室的名称xiname(0)=机械工程:xiname(1)=电子工程:xiname(2)=网络通讯xiname(3)=计算机科学:jyscount(0)=2:jyscount(1)=2:jyscount(2)=2jyscount(3)=3:jysname(0,0)=制图:jysname(0,1)=车工:jysname(1,0)=脉冲jysname(1,1)=微电子:jysname(2,0)=网络设备:jysname(2,1)=网络施工jysname(3,0)=软件:jysname(3,1)=硬件:jysname(3,2)=多媒体xicount=4lxi=2ljys=1本部分代码中,数组定义的元素个数,各数组元素的值都应该由服务器根据当前数据表中的内容动态生成,在这里提供这些内容是为了让读者能把本节各例中的代码作为一个完整的网页文件调试。

【例12-3】选择教研室后的处理subjys_onchange()dimk,l,njysk=document.forms(0).jys.valueifk=其它thennjys=prompt(请输入添加的教研室名称,其它)l=document.forms(0).jys.lengthdocument.forms(0).jys.options(l-1).value=njysdocument.forms(0).jys.options(l-1).text=njysdocument.forms(0).jys.options(l-1).selected=truedocument.forms(0).myname.focusendifendsub在教研室的列表中设置了一个其它,当选择该项时,通过本部分的代码可以输入一个新的教研室名称,添加到列表中供使用。

显示的对话框如图12-2所示。

图12-2添加新教研室时的提示【例12-4】当指定系的编号为C时,显示可供选择的各教研室VBScript+ASP动态网页制作240subdisp_jys(c)‘先删除全部表项l=document.forms(0).jys.lengthforj=l-1to0step-1document.forms(0).jys.removejnext‘显示各表项forj=0tojyscount(c)-1sete=document.createelement(option)e.text=jysname(c,j)e.value=jdocument.forms(0).jys.addel=document.forms(0).jys.lengthnext‘添加一个其它选项sete=document.createelement(option)e.text=其它e.value=其它document.forms(0).jys.addeendsub本部分代码中,首先删除教研室列表框中所有选项,显示由jyscount(c)指定个数,由jysname指定内容的各教研室名称,供选择。

如图12-3所示图12-3显示某一系的教研室列表【例12-5】选择系后的处理subxi_onchange()dimk,l,j,nxm,njys第12章综合举例241k=document.forms(0).xi.valueifk=其它thennxm=inputbox(请输入添加的系名)ifnxmthennjys=prompt(请输入添加的教研室名称,)ifnotisnull(njys)thenl=document.forms(0).xi.lengthdocument.forms(0).xi.options(l-1).value=l-1document.forms(0).xi.options(l-1).text=nxmxiname(l-1)=nxm‘新系中不会有教研室,以下先删除原显示内容l=document.forms(0).jys.lengthforj=l-1to0step-1document.forms(0).jys.removejnext‘把输入的教研室名称添加到列表框中sete=document.createelement(option)e.text=njyse.value=njysdocument.forms(0).jys.addedocument.forms(0).jys.options(0).selected=truedocument.forms(0).myname.focuselsedocument.forms(0).xi.options(lxi).selected=truedisp_jys(lxi)endifelsedocument.forms(0).xi.options(lxi).selected=truedisp_jys(lxi)endifelseifisNumeric(k)thenl=document.forms(0).xi.lengthdocument.forms(0).xi.options(l-1).value=其它document.forms(0).xi.options(l-1).text=其它disp_jys(k)endifendifendsub本例代码中,当选择某系后,在教研室列表框中显示该系所有教研室。

若在系列表框中VBScript+ASP动态网页制作242选择的是其它,则要求输入新的系名,如图12-4所示。

接着输入新的教研室名。

如图12-2所示。

最后显示如图12-5所示。

图12-4添加系名图12-5添加了新的系和教研室后的显示【例12-6】表单提交时的合法性检查functionmyform_onsubmit()dimk1,k2ifdocument.myform.myname.value=thenalert姓名框不能为空myform_onsubmit=falseelsek1=document.myform.xi.valueifisnumeric(k1)thendocument.myform.selxi.value=xiname(k1)elsedocument.myform.selxi.value=document.myform.xi.valueendifk2=document.myform.jys.valueifisnumeric(k2)then第12章综合举例243document.myform.seljys.value=jysname(k1,k2)elsedocument.myform.seljys.value=k2endifendifendfunction/script/HEADBODYBGCOLOR=WHITEH3align=center名单添加/H3hr本代码的前一部分是提交表单时的处理,在提交前将实际选择的系名和教研室名保存到表单的隐藏对象中。

因为若只把选择的序号提交给服务器,有可能因为同时有几个人在操作数据库而产生不正确的结果。

【例12-7】指定表单及表单的发送方式formname=myformmethod=get为了让读者便于从地址行观察选择后发送了什么,本部分选用GET方式,并且没有指出发送给什么文件,本章最后部分将对它进行修改。

【例12-8】显示表单系别:

selectname=xisize=1scriptfori=0toxicount-1iflxi=ithendocument.writeoptionvalue=‘i‘selectedxiname(i)elsedocument.writeoptionvalue=‘i‘xiname(i)endifnext/scriptoptionvalue=其它其它/option/select教研室:

Selectname=jyssize=1scriptfori=0tojyscount(lxi)-1ifljys=ithendocument.writeoptionvalue=‘i‘selectedjysname(lxi,i)elsedocument.writeoptionvalue=‘i‘jysname(lxi,i)endifnextVBScript+ASP动态网页制作244/scriptoptionvalue=其它其它/option/selectBR姓名:

inputtype=textname=mynamesize=10brscriptdocument.writeinputtype=hiddenname=selxivalue=lxidocument.writeinputtype=hiddenname=seljysvalue=ljys/scriptinputtype=submitvalue=添加inputtype=resetvalue=重填/formhrfontsize=-2设计创作:

ahref=mailto:xuweilin@pub.cz.jsinfo.net许卫林/a/font/BODY/HTML显示表单的代码中两处使用了客户端脚本,它根据数组的内容来确定列表框中显示的内容。

只要进一步由服务器根据数据库内容生成数组内容,就可让列表框真正体现数据库内容。

把本节中各例依次合并成一个文件,可以用html作为扩展名保存,之后可以执行该代码了,通过地址栏可检查发送内容的正确性。

除非你输对了每一个符号,或者你对本教材前5章的大部分例子掌握了,否则,本例的调试是非常困难的,能借助的工具也是非常有限的。

最方便的是获得原代码的电子文档,那么就请和我联系吧!12.2数据库操作数据库的操作包括两个方面的内容,一方面需要获得库中内容来显示供选择的列表,另一方面当用户提交表单后要把内容写入到数据库中。

12.2.1获取初始数据【例12-9】初始化部分%@language=VBScript%%optionexplicitresponse.expires=0%!--#includefile=adovbs.inc--%dimxiname()‘存放各系的名称第12章综合举例245dimjysname()‘存入各教研室名称的二维数组dimjyscount()‘存放各系的教研室个数的数组dimobjconn,objRS,strn,strSQLdimxicount‘存放系的个数dimi,jdimmaxjyss‘存放系的教研室的最大个数setobjConn=server.createobject(ADODB.Connection)objConn.openDSN=md;UID=sa;PWD=;本部分代码中用:

!--#includefile=adovbs.inc--嵌入了一个文件,它是由系统提供的,包含了在写入数据时所要用到的各种常量定义。

代码中还定义了一些变量和动态数组,用于存放读入的内容。

【例12-10】提取数据表中的系名称和教研室名称setobjRS=objConn.execute(select系名frommdgroupby系名)ifnotobjRS.eofthen‘以下求得系的个数xicount=0whilenotobjRS.eofxicount=xicount+1objRS.movenextwendobjRS.movefirst‘以下求得各系的名称redimxiname(xicount)redimjyscount(xicount)fori=0toxicount-1xiname(i)=objRS(系名)objRS.movenextnextobjRS.close‘以下求得各系的教研室个数setobjRS=objConn.execute(selectdistinct系名,教研室名frommd)whilenotobjRS.eoffori=0toxicount-1ifxiname(i)=objRS(系名)thenjyscount(i)=jyscount(i)+1endifnextobjRS.movenextwendVBScript+ASP动态网页制作246‘以下求教研室个数的最大值,以便确定动态数组的元素个数maxjyss=0fori=0toxicount-1ifjyscount(i)maxjyssthenmaxjyss=jyscount(i)next‘以下求得各系中各教研室的名称redimjysname(xicount,maxjyss)objRS.movefirstfori=0toxicount-1jyscount(i)=0nextwhilenotobjRS.eoffori=0toxicount-1ifxiname(i)=objRS(系名)thenjysname(i,jyscount(i))=objRS(教研室名)jyscount(i)=jyscount(i)+1endifnextobjrs.movenextwendelsexicount=0endif‘以下部分关闭数据库objRS.closeobjConn.closesetobjConn=nothingifxicount=0thenresponse.write数据表为空response.endendif%【例12-11】显示数据表中获得的有关内容%response.write系的个数为xicountBRresponse.write各系的教研室如下:

BRfori=0toxicount-1response.writexiname(i):forj=0tojyscount(i)-1response.writejysname(i,j),nextresponse.writeBR第12章综合举例247nextresponse.write系的最多教研室个数为:maxjyss%本部分代码是为检查读出的数据的正确性而设置的,在合并成的最后的文档中,不需要这一部分。

有了以上各例中的代码后,你可以将它们依次合并成一个文件,扩展名必须用asp,显示结果如图12-6所示。

图12-6所示记录内容12.2.2写入数据库当用户表单提交后,可以使用以下的代码将提交的内容写入到数据库中。

【例12-12】把提交内容写入数据表ifrequest.servervariables(CONTENT_LENGTH)0thensetobjRS=server.createobject(ADODB.Recordset)strn=trim(request.form(myname))strn=left(strn,10)iflen(strn)0thenobjrs.cursorlocation=adUseserverobjRS.cursortype=adopenkeysetobjRS.LockType=adLockoptimisticstrSQL=select*frommdwhere系名=‘strSQL=strSQLrequest.form(系名)‘and教研室名=‘strSQL=strSQLrequest.form(教研室名)‘and姓名=‘strSQL=strSQLrequest.form(姓名)‘objRS.openstrSQL,objConn,,,adcmdtextifobjRS.eofthenobjRS.addnewobjRS(系名)=left(request.form(selxi),20)objRS(教研室名)=left(request.form(seljys),20)VBScript+ASP动态网页制作248objRS(姓名)=strnobjRS.updateelseresponse.write同样内容的记录已存在!添加记录失败endifobjRS.closesetobjRS=nothingelseresponse.write输入的姓名实际是空的或长度太大!添加记录失败endifendif代码中创建了记录集对象,判断是否有相同的记录已经存在,若没有时,通过记录集的addnew方法添加一条记录,最后关闭记录集。

12.3客户端初始数据生成通过上一节中介绍的代码可以将数据库中的内容读入到变量或数组中。

之后可以使用以下的代码实现动态地生成客户端的初始数据。

【例12-13】动态生成客户端初始数据dimxiname(%=xicount%)dimjyscount(%=xicount%)dimjysname(%=xicount%,%=maxjyss%)%fori=0toxicount-1response.writexiname(i)=xiname(i)vbCrLfresponse.writejyscount(i)=jyscount(i)vbcrlfforj=0tojyscount(i)-1response.writejysname(i,j)=jysname(i,j)vbcrlfnextnext%xicount=%=xicount%%response.writevbcrlfifisnumeric(cstr(request(xi)))thenresponse.writelxi=reque

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论