为了方便使用分类,我定义了一个分类表category,里面字段是
id(自动编号)  cat_name(分类名) parent_id(父ID,对应本表ID) cat_order(顺序) is_show(是否显示)  u_id(这个用来区别是新闻分类,还是产品分类,还是其他分类),为了方便,我将这些分类全部放在这张表中。
在给客户添加分类的时候,结果有太多的分类,本来前台显示的时候,将它们全部显示出来了,好长。客户提出修改意见,要求将它们改成点击大分类,才可以将其子分类显示出来,并且每个分类下面还有一条虚线,并且大分类前面有个图片加号,展开后要变成减号。

数据库连接:

以下为引用的内容:

<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("数据库名")
%>

打开数据库:

以下为引用的内容:

exec="select * from 数据库表"
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
参数1,1为读取

读取内容格式:<%=rs("字段")%>

添加记录处理程序:

以下为引用的内容:

<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("数据库名")
name=request.form("字段")  name,tel,message为提交表单所设置的字段值
tel=request.form("字段")
message=request.form("字段")
exec="insert into 表名(字段)values('"+字段+"')" 多个用逗号隔开
conn.execute exec  使用execute提交
conn.close
set conn=nothing
%>

搜索处理程序:

以下为引用的内容:

<%
name=request.form("字段") name,tel为提交表单所设置的字段值
tel=request.form("字段")
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("数据库名")
exec="select * from 表 where name='"+字段+"' and tel="+字段
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,1
%>
'页面搜索到的内容导出来
<%
do while not rs.eof
%><tr>
<td><%=rs("name")%></td>
<td><%=rs("tel")%></td>
<td><%=rs("time")%></td>
</tr>
<%
rs.movenext
loop
%>

删除记录处理程序:

以下为引用的内容:

<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("数据库名")
exec="delete * from 表名 where 编号="&request.form("id")
conn.execute exec
%>

修改记录处理程序:

以下为引用的内容:

<%
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("数据库名")
exec="select * from 表名 where 编号="&request.form("id")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn,1,3  '1,3为修改意思
rs("name")=request.form("字段")  'name,tel,message为提交表单所设置的字段值
rs("tel")=request.form("字段")
rs("message")=request.form("字段")
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
%>

修改记录执行程序:输入ID号页面>>>导出相对应ID数据>>>>>>直接修改的处理程序

后台登陆处理程序例子:

以下为引用的内容:

<%
dim name,password
name=request.form("name")
password=request.form("password")
dim exec,conn,rs
exec="select *from 表名 where(name='"&字段&"' and password='"&字段&"')"
set conn=server.createobject("adodb.connection")
conn.open "driver={microsoft access driver (*.mdb)};dbq="&server.mappath("数据库名")
set rs=server.createobject("adodb.recordset")
rs.open exec,conn
if not rs.eof then
rs.Close
conn.Close
session("checked")="yes"
session("check")="right"
response.Redirect "index.asp"
else
session("checked")="no"
session("check")="wrong"
response.Redirect "login.asp"
end if
%>

每个后台页面加上:
<%if not session("checked")="yes" then 'session里面定义一个checked字符串变量
response.Redirect "login.asp" 
else
%>

asp开发规范 ——写这个东西请多多指教,以后开发时好少吃点苦头。



一、单页编写规范:



切记页面要分模块来写:

第一模块:接收参数。[有可能从不同页面提交到同一个页面;也可能出现两个表单项以哪个优先的处理。

第二模块:定义全局变量。

第三模块:写处理代码(尽量将代码都包含到函数中,详见页面附注一。)。——到此asp代码主要部分完成。

第四模块:纯html代码,利用储存在全局变量中的值来生成页面。

第五(注意):要在页面头部写清页面逻辑。(如何接收、处理。)

优点:便于维护。模块独立,便于重复使用到类似页面。



二、全站文件构建规范:



1.工程接手后,先观看静态页,掌握逻辑及浏览顺序。

2.抽取页面中被重复利用到的地方做成嵌入文件。

3.抽取头文件、尾文件,及左侧菜单栏,做成嵌入文件。

4.划分页面结构,做出模板文件。——以后制作中就copy它,然后就可直接制作。

注意:不要急于编写页面,除非你接手的是一项小工程,或者用户需求已经非常清楚确定并且不会再更改,否则,保持页面代码的可读性是非常重要的!(当你面对大返工时,你的心情如何?先对潜在的危险考虑一下吧!)

——因为我们每个人都对自己写的代码非常明白,而都比较难于读懂别人写的代码。并且,由于客户需求的变化,修改甚至推翻原有设计是比较常见的事。所以要注意在编写代码时注意让后来者快速读懂,并便于修改。][至少要在页面头部加上注释,在代码中间重要的部分,也有必要加一些说明性注释。]



我们所作的一切仅仅是为了:增加可移植可重用性、使逻辑清楚,便于维护、

适应用户需求的改变,并尽快完成,减少无用功。

――――――――――――――――――――――――――――――――――――――



附注一:第三模块编写说明。《ASP页面编写结构》

1.先写注释

2.写嵌入文件。

3.写大块的ASP代码(从COM中取出的)

——注意:复杂页面,尽量将不同COM的操作封装在独立的函数里;

——函数结尾有一句调用,后面页面中直接读取函数处理完的数据(已被赋给全局变量)

——调用函数前,对页面入口参数进行合法性检验。



附注二:第四模块编写说明。《Html代码部分需要注意的》

1)最好不使页面的asp代码和html代码混杂在一起,——感觉比较混乱。

2)通过获取全局变量的数据得到asp的处理结果。

3)关于客户端javascript:

表单提交前要进行合法性检验。写在



对下拉框要有和隐藏按钮同步的,写出单独小函数,放在该按钮的下面。

对大型innerHTML型的客户端交互操作,将代码集中写在相应对应的 



写客户端脚本时,可多写些函数,使函数间传递的参数简单,功能单一,以便日后有类似页面,可以将其拆下来再使用。 

对网页制作的要求:

网页人员完成的页面,为保证在使用时不会出现混乱,请他们作以下处理:

1.表格不要嵌套太多;

2.表格宽度要用象素规定宽度;

3.单页中,一个功能模块要做成一个表格,以便编写页面时,将重复部分提取成嵌入文件。

4.其它要注意的:精简代码、注意表格中字符和边框的宽度。

5.文件名请用英文小写加数字(和半角下划线)命名。[想想你的页面搬到unix主机上的惨状]



为了规范程序代码编写,提高代码可读性,降低后期维护成本,提高办公效率,建议以后编写的程序按以下几条规范进行:



一、 统一VBSCRIPT和ASP程序编写规范:



(一)变量命名规则:



由于在ASP和VBSCRIPT中因为不需要声明变量,同时不能声明变量的类型,但为了提高代码的可读性,养成好的开发习惯,对于本系统开发的变量命名统一规则如下:



1. 使用Dim、Public、Private声明变量;



例如:Dim iStudentNum



2. 变量类型的体现:



a、整型变量:以小写字母i开头,后面跟变量标示符,英文单词的第一个字母大写。



例如:下面声明一个存储数据库记录多少的变量



Dim iResordsetNumber



b、单精度实体变量:以小写字母f开头,后面跟变量标示符,英文单词的第一个字母大写。



c、双精度实体变量:以小写字母d开头,后面跟变量标示符,英文单词的第一个字母要大写。



d、 字符型变量:以小写字母s开头;



e、 布尔型变量:以小写字母b开头;



f、数组变量:数组类型+“_”+“Array”+“_”+“变量标示符”



例如:定义一个存储学生成绩的数组(存储单精度实体类型变量)



Dim f_Array_StudentMark



3. 变量标示符要符合标示符标准,同时容易理解,尽量使用英文单词来代替,尽量避免使用缩写或简写。



例如:存储校友通讯录的字符串变量定义为:



Dim sSchoolfellowAddressList;



虽然这样定义在输入的时候比较麻烦,但是,它大大提高了程序的可读性,见其变量命名就知其意。在做变量查找的时候也比较方便。速度和性能总是不能两全,为了方便后者我们也就只有牺牲速度。



4.在变量定义后面加变量功能定义的注释。



(二)常量命名规则:



类型体现和上面一样,不一样的地方是,所有后面的标示符全部大写,例如:



定义一个存储语言种类的的字符型常量:



Const sLANGUAGE_TYPE=”Chinese”



(三)功能函数、过程命名规则:



1. 使用Function声明函数,用Sub声明过程;



2. 函数名或过程名的第一个字母大写,且后面的每个单词第一个字母大写。



例如:



Function CheckValidityOfInput(sStuentMark)



‘此处写代码



…………



End Function



3. 函数名或过程名要容易读,简单明了。



4. 在函数前面加注释,说明函数功能、参数说明、创建日期、修改日期、修改原因、创建人、修改人等相关信息。



(四)代码缩进标准:



为了提高代码的美观型和易读性,在此提出代码编写的版面格式:区间与区间之间以一个为间距。



例如:



‘***********************************************************



‘功能:检测输入字符串中的单引号,如果有则把原来的一个单引号变成两



‘ 个单引号,两个变成四个,依次类推,从而避免SQL语句执行错误。



‘创建人:XXXX



‘修改时间:



‘修改原因:



‘修改人:



‘输入参数说明:sInputString:需要进行单引号检测的字符串



‘***********************************************************



Function CheckValidityOfInput(sInputString)



Dim iCirculationControl ‘控制循环



Dim sApartString ‘分离字符检测



Dim iLenOfInput ‘输入字符长度



iLen= Len(Trim(sInputString))



For iCirculationControl = 1 To iLen



If Mid(sInputString, iCirculationControl, 1) <>"'" Then



sApartString = sApartString & _



Mid(Trim(sInputString), iCirculationControl , 1)



Else



sApartString = sApartString & "''"



End If



Next



CheckValidityOfInput = sApartString



End Function



二、 统一JavaScript程序编写规范:



JavaScript的命名规则和上面大部分相同,唯一不同的地方是:变量使用Var来声明,在声明结束后以分号(;)结束。



函数的代码要求层次清楚,该写在下一行的地方尽量往下一行写,不要在一行中完成所有代码,这样看起来不容易,检查错误也特别费时。



在写函数的时候记着加注释内容,以便以后维护时快速了解程序功能。



下面是一个JavaScript程序:



三、 系统性能提高,代码规范:



1.在ASP页面内,凡是使用CreageObject()创建的对象(Com、Recordset等),对于这些变量,应当在该页结束进行对象释放:即



Set 对象变量名=Nothing



2.数据库打开以后在不用的时候(通常是本页最后面),需要对连接进行关闭;



3.对于SQL语句,存储过程,尽量避免使用*来取所有字段,为了代码的易读性,SQL关键字要求全部大写,字段部分小写。



例如:



SELECT name,age,birthday,telephone,address FROM SchoolFellow.Address WHERE name=’xxxx’ ORDER BY birthday DESC



4.在ASP页中所有属性值尽量使用双引号括起来,特别是有属性Value的值,不要因为省时间而把双引号去掉(有的地方虽然可以去掉,程序不会出现错误,但,在有的地方去掉双引号会引来更多的麻烦。)



例如:



”>



在这个例子中,如果把Value属性值的单引号去掉,如果数据库中出来的值有空格,空格后面还有值,结果,显示的内容只有空格前面的内容,而后面的内容就会丢失。这只是其中一种情况,其他还有很多未知情况发生。



5. 配对标签问题:对于象之类的标签,要注意检查配对的位值,有没有结束标志。



6. 对于需要输入字符串,且需要使用SQL语句的地方,需要进行单引号处理,调用/include/CheckQ.asp中的两个方法(一个是客户端处理,一个是服务器端处理,根据需要进行调用,安全性要求高的地方多数情况下采用服务器端处理。)之一。



7. 为了提高安全性,能使用ASP编写的代码,尽量采用ASP编写,在服务器端运行,不让用户看到代码。



8. 对于安全性要求特别高的地方,建议采用三层结构:使用VB或Delphi编写商业逻辑层代码(COM),尽量把数据库的连接部分封装到组件中,提高安全性能,通过组件和数据库交流。



9. 对于网站的安全性,应该采用好的断口扫描软件,查看网站已经打开的断口,把不安全的断口给关闭。



四、 养成写开发文档的习惯:



对于每一个页面设计(前接页,后接页),包括功能说明,页面设计,页面名称,存放位置等,应当有相应的文档记载。对于发生改动的地方,需要保留原来的部分(注释或备份),并说明备份文件存放的地方,改动时间,修改人。



对于程序部分,应该有相应的设计流程,改动的时候,也需要设计改动流程图,以便以后进行对比,和查找问题所在位置,以及问题的严重性分析。

 

1.函数array() 

功能:创建一个数组变量 

格式:array(list) 

参数:list 为数组变量中的每个数值列,中间用逗号间隔 

例子: 

<% i = array ("1","2","3") %> 

结果: i 被赋予为数组  

2.函数Cint() 

功能:将一表达式/其它类型的变量转换成整数类型(int) 

格式:Cint(expression) 

参数:expression 是任何有效的表达式/其它类型的变量 

例子: 

<% 

f = "234" 

response.write cINT(f) + 2 

%> 

结果: 236 

函数Cint()将字符"234"转换 成整数234.如果表达式为空, 或者无效时,返回值为0; 

3.函数:Creatobject() 

功能:创建及返回一个ActiveX对象. 

格式:Creatobject(obname) 

参数bname 是对象的名称 

例子: 

<% 

Set con = Server.CreateObject("ADODB.Connection") 

%> 

结果: 

4.函数Cstr() 

功能:将一表达式/其它类型的变量转换成字符类型(string) 

格式:Cstr(expression) 

参数:expression是任何有效的表达式/其它类型的变量 

例子: 

<% 

s = 3 + 2 

response.write "The result is:" & cStr(s) 

%> 

结果:函数Cstr()将整数 5 转换 成字符"5". 

5.函数Date() 

功能:返回当前系统(server端)的日期 

格式: Date() 

参数:无 

例子<% date () %> 

结果:06/13/07 

6.函数Dateadd() 

功能:计算某个指定的时间和 

格式: dateadd(timeinterval,number,date) 

参数:timeinterval是时间单位(月,日..); number是时间间隔值,date是时间始点. 

例子: 

<% 

currentDate = #6/13/07# 

newDate = DateAdd("m",3,currentDate) 

response.write newDate 

%> <% 

currentDate = #12:34:45 PM# 

newDate = DateAdd("h",3,currentDate) 

response.write newDate 

%> 

结果: 

13/6/07 

3:34:45 PM 

其中 

"m" = "month"; 

"d" = "day"; 

如果是currentDate 格式,则, 

"h" = "hour"; 

"s" = "second"; 

7.函数Datediff() 

功能:计算某量个指定的时间差 

格式: datediff(timeinterval,date1,date2[,firstdayofweek[,firstdayofyear]]) 

参数: timeinterval 是时间单位; date1,date2是有效的日期表达式,firstdayofweek,firstdayofyear 是任意选项. 

例子: 

<% 

fromDate = #8/4/99# 

toDate = #1/1/2000# 

response.write "There are " & _ 

DateDiff("d",fromDate,toDate) & _ 

" days to millenium from 8/4/99." 

%> 

结果:There are 150 days to millenium from 8/4/99. 

8.函数day() 

功能:返回一个整数值,对应于某月的某日 

格式: day(date) 

参数: date是一个有效的日期表达式; 

例子<% =date(#8/4/99#) %> 

结果:4 

9.函数formatcurrency() 

功能:转换成货币格式 

格式: formatcurrency(expression [,digit[,leadingdigit[,paren[,groupdigit]]]]) 

参数: expression 是有效的数字表达式;digit表示小数点后的位数;leadingdigit,paren,groupdigit是任意选项. 

例子<%=FormatCurrency(34.3456)%> 

结果34.35 

10.函数Formatdatetime() 

功能:格式化日期表达式/变量 

格式: formatdatetime(date[,nameformat]) 

参数: date为有效的日期表达式/变量;nameformat是指定的日期格式常量名称. 

例子<% =formatdatetime("08/04/99",vblongdate) %> 

结果:Wednesday,August 04,1999 

说明: 

--------------------------------------------------------------------------------

描述

返回表达式,此表达式已被格式化为日期或时间。 

语法

FormatDateTime(Date[, NamedFormat])

FormatDateTime 函数的语法有以下参数:



参数 描述 

Date 必选项。要被格式化的日期表达式。 

NamedFormat 可选项。指示所使用的日期/时间格式的数值,如果省略,则使用 vbGeneralDate。 





设置

NamedFormat 参数可以有以下值:

常数 值 描述 

vbGeneralDate 0 显示日期和/或时间。如果有日期部分,则将该部分显示为短日期格式。如果有时间部分,则将该部分显示为长时间格式。如果都存在,则显示所有部分。 

vbLongDate 1 使用计算机区域设置中指定的长日期格式显示日期。 

vbShortDate 2 使用计算机区域设置中指定的短日期格式显示日期。 

vbLongTime 3 使用计算机区域设置中指定的时间格式显示时间。 

vbShortTime 4 使用 24 小时格式 (hh:mm) 显示时间。 



说明

下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime: 

Function GetCurrentDate 

"FormatDateTime 把日期型格式化为长日期型。

GetCurrentDate = FormatDateTime(Date, 1) 

End Function

--------------------------------------------------------------------------------

<script language=vbs>

for i=0 to 4

alert(" formatdatetime(now,"&i&") 的时候是:"&formatdatetime(now,i))

next

</script>



11.函数Isnumeric() 

功能:返回一个布尔值,判断变量是否为数字变量,或者是可以转换成数字的其它变量. 

格式:isnumeric(expression) 

参数:expression 是任意的变量. 

例子: 

<% 

i="234" 

response.write isnumeric(i) 

%> 

结果: true. 

12.函数Isobject() 

功能:返回一个布尔值,判断变量是否为对象的变量, 

格式: isobject(expression) 

参数: expression 是任意的变量. 

例子: 

<% 

set con =server.creatobject("adodb.connection") 

response.write isobject(con) 

%> 

结果: true 

13.函数:Lbound() 

功能:返回一个数组的下界. 

格式:Lbound(arrayname[,dimension]) 

参数:arrayname 是数组变量,dimension 是任意项 

例子: 

<% 

i = array("1","2","3") 

response.write lbound(i) 

%> 

结果:0

14.函数Lcase() 

功能:将一字符类型变量的字符全部变换小写字符. 

格式:Lcase(string) 

参数:string是字符串变量 

例子: 

<% 

str="THIS is Lcase!" 

response.write Lcase(str) 

%> 

结果:this is lcase! 

15.函数left() 

功能:截取一个字符串的前部分; 

格式:left(string,length) 

参数:string字符串,length截取的长度. 

例子: <% =left("this is a test!",6) %> 

结果:this i 

16.函数len() 

功能:返回字符串长度或者变量的字节长度 

格式:len(string *varname) 

参数:string字符串;varname任意的变量名称 

例子: 

<% 

strtest="this is a test!" 

response.write len(strtest) 

%> 

结果:15 

17.函数ltrim() 

功能:去掉字符串前的空格. 

格式:ltrim(string) 

参数:string 字符串. 

例子: <% =ltrim (" this is a test!") 

结果:this is a test! 

18.函数Mid() 

功能:从字符串中截取字符串. 

格式:mid(string,start [,length]) 

参数:string字符串,start截取的起点,length要截取的长度. 

例子: 

<% 

strtest="this is a test, Today is Monday!" 

response.write mid(strtest,17,5) 

%> 

结果:Today 

19.函数minute() 

功能:返回一数值, 表示分钟 

格式:minute(time) 

参数: time是时间变量 

例子lt;% =minute(#12:23:34#) %> 

结果:23 

20.函数month() 

功能:返回一数值, 表示月份 

格式:month(time) 

参数:time是日期变量 

例子<% =month(#08/09/99) %> 

结果:9 

21.函数monthname() 

功能:返回月份的字符串(名称). 

格式:Monthname(date [,abb]) 

参数: date是日期变量,abb=true时 则月份的缩写, 

例子: 

<% =monthname(#4/5/99#) %> 

结果:April 

22.函数Now() 

功能:返回系统的当前时间和日期. 

格式:now() 

参数:无 

例子: 

<% =now() %> 

结果: 05/10/00 8:45:32 pm 

23.函数:replace() 

功能:在字符串中查找,替代指定的字符串. 

格式:replace(strtobesearched,strsearchfor,strreplacewith [,start[,count[,compare]]]) 

参数:strtobesearched是字符串; strsearchfor是被查找的子字符串;strreplacewith 是用来替代的子字符串.start,count,compare 是任意选项. 

例子: 

<% 

strtest="this is an apple." 

response.write replace(strtest,"apple","orange") 

%> 

结果:this is an orange. 

24.函数right() 

功能:截取一个字符串的后部分 

格式:right(string,length) 

参数:string字符串,length截取的长度. 

例子: 

<% 

strtest="this is a test!" 

response.write right(strtest,3) 

%> 

结果:st! 

25.函数rnd() 

功能:返回一个随机数值 

格式:rnd[(number)] 

参数:number是任意数值. 

例子: 

<% 

randomize() 

response.write rnd() 

%> 

结果:0/1数值之一,无randomize(), 则不能产生随机数. 

26.函数round() 

功能:完整数值 

格式:round(expression[,numright]) 

参数:expression数字表达式;numright任意选项. 

例子: 

<% 

i=12.33654 

response.write round(i) 

%> 

结果: 12 

27.函数rtrim() 

功能:去掉字符串后的空格. 

格式:rtrim(string) 

参数:string 是字符串 

例子: 

<% 

response.write rtrim("this is a test! ") 

%> 

结果:this is a test! 

28.函数second() 

功能:返回一个整数值. 

格式:second(time) 

参数:time是一个有效的时间表达式; 

例子lt;% =second(# 12:28:30#) %> 

结果:30 

29.函数strReverse() 

功能:返回与原字符串排列逆向的字符串. 

格式:strreverse(string) 

参数:string是字符串 

例子<% =strreverse("this is a test!") 

结果:!tset a si siht 

30.函数time() 

功能:返回当前系统的时间值. 

格式:time() 

参数:无 

结果:9:58:28 Am 

31.函数trim() 

功能:删去字符串前,后的空格. 

格式:trim(string) 

参数:string 字符串. 

例子: 

<% 

strtest=" this is a test! " 

response.write trim(strtest) 

%> 

结果:this is a test! 

32.函数UBound() 

功能:返回一个数组的上界. 

格式:Ubound(expression [,dimension]) 

参数:expression 是数组表达式/数组变量,dimension 是任意项 

例子: 

<% 

i = array("1","2","3") 

response.write ubound(i) 

%> 

结果: 2 

33.函数:UCase() 

功能:将一字符类型变量的字符全部变换成大写字符. 

格式:Ucase(string) 

参数:string是字符串变量 

例子: 

<% 

str="THIS is Lcase!" 

response.write Lcase(str) 

%> 

结果:THIS IS LCASE! 

34.函数Vartype() 

功能:返回变量的常量代码(整数) 

格式:Vartype(varname) 

参数:varname是任何类型的变量名称. 

例子: 

<% 

i=5 

response.write vartype(i) 

%> 

结果:2 (2表示整数,须要参考ASP常量代码.) 

35.函数Weekday() 

功能:返回一个整数,对应一周中的第几天. 

格式:Weekday(date [,firstofweek]) 

参数: date为日期变量,firstofweek为任选项. 

例子: 

<% 

d= # 5/9/00 # 

response.write weekday(d) %> 

结果:3(3 表示是星期二) 

36.函数weekdayname() 

功能:返回字符串,对应星期几. 

格式:weekdayname(weekday[,abb[,firstdayofweek]]) 

参数:weekday为日期变量,abb,firstdayofweek为任选项. 

例子: 

<% 

d = #8/4/99# 

response.write weekdayname(d) 

%> 

结果: Wednesday 

37.函数year() 

功能:返回日期表达式所在的年份. 

格式:year(date) 

参数: date是有效的日期表达式 

例子: 

<% =year(#8/9/99#) %> 

结果:1999 

38.函数Mod()功能:取余数.

例子:3 Mod 2 

结果:1

 

在asp代码中分页是有点麻烦的事情,个人在在代码编写过程中把分页代码写成了两个函数,虽然在功能上不是很完善,但对于一般的应用应该是满足的了。 

<%

'分页函数分为两个函数

'CalcPage(totalrec,msg_per_page,currentpage,n,rowcount,PageRs) 分页计算函数

'PageList(ListType,url,querry,Separator,ListLink) 分页列表函数



'分页计算函数

'totalrec 记录集总数

'msg_per_page 每页显示的记录数,在调用CalcPage时需提前对该变量赋值

'currentpage 当前页变量,在调用CalcPage时需提前对该变量赋值

'n 总页数  

'rowcount 设置每一页的数据记录数

'PageRs 记录集对象

sub CalcPage(totalrec,msg_per_page,currentpage,n,rowcount,PageRs)

 n=0 '设置无记录时页数为0 

 if currentpage="" then currentpage=0

 'PageRs.EOF and PageRs.bof  无记录

 'Not PageRs.EOF Or Not PageRs.BOF 有记录

 if Not PageRs.EOF Or Not PageRs.BOF then 

  totalrec=PageRs.recordcount

  PageRs.pagesize=msg_per_page

  if totalrec mod msg_per_page = 0 then '计算总页数,recordcount:数据的总记录数

   n = totalrec\msg_per_page 'n:总页数

  else 

   n = totalrec\msg_per_page+1 

  end if 

  if not isnumeric(currentpage) or currentpage="" then currentpage=1

  If currentpage <> "" then

   currentpage = cint(currentpage)

  end if

  if currentpage < 1 then 

   currentpage = 1

  end if 

  if currentpage*msg_per_page > totalrec and not((currentpage-1)*msg_per_page < totalrec) then 

   currentPage=1

  end if

  PageRs.absolutepage = currentpage 'absolutepage:设置指针指向某页开头

  rowcount = PageRs.pagesize            'pagesize:设置每一页的数据记录数

 end if

end sub

%>

<%

'分页列表函数

'url 跳转的地址

'querry ?后的参数

'Separator 分隔符

'ListType 分页类型

'类型:0 "第一页 | 前一页 | 下一页 | 最后页"

'类型:1 "1 | 2 | 3 | 4 | ..........| 下一页"

'类型:2 "第一页 | 前十页 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 后十页 | 最后页"

'ListLink 链接使用的样式



sub PageList(ListType,url,querry,Separator,ListLink)

 if Separator="" then Separator="|"

 if ListType="" then ListType="0"

 select case ListType

  case "0"

   response.write"第"&currentpage&"/"&n&"页&nbsp;&nbsp;" 

   response.write"共"&totalrec&"条信息&nbsp;&nbsp;"

   if currentpage <= 1 then

   response.write"第一页&nbsp;"&Separator&"&nbsp;"

   response.write"前一页&nbsp;"&Separator&"&nbsp;"

   else

   response.write"<a href="""&url&"?page=1&"&querry&""" class="""&ListLink&""">第一页</a>&nbsp;"&Separator&"&nbsp;" 

   response.write"<a href="""&url&"?page="&currentpage-1&"&"&querry&"""  class="""&ListLink&""">前一页</a>&nbsp;"&Separator&"&nbsp;" 

   end if

   if currentpage = n then

   response.write"下一页&nbsp;"&Separator&"&nbsp;"

   response.write"最后页&nbsp;"

   else

   response.write"<a href="""&url&"?page="&currentpage+1&"&"&querry&"""  class="""&ListLink&""">下一页</a>&nbsp;"&Separator&"&nbsp;"

   response.write"<a href="""&url&"?page="&n&"&"&querry&""" class="""&ListLink&""">最后页</a>&nbsp;"

   end if

  case "1"

   if currentpage < n then

    response.write"<a href="""&url&"?page="&currentpage+1&"&"&querry&""" class="""&ListLink&""">下一页</a>&nbsp;"    

   else

    response.write"下一页&nbsp;"    

   end if

   for i=1 to n

    if cstr(i)=cstr(currentpage) then

     response.write "<b>"&i&"</b>"&"&nbsp;"&Separator&"&nbsp;"

     else

      response.write"<a href="""&url&"?page="&i&"&"&querry&""" class="""&ListLink&""">"&i&"</a>&nbsp;"&Separator&"&nbsp;"  

    end if

   next

   

  case "2"

   PageMerCout=10 '每次可翻的最大页数

   '取得记录的最大页码段

   if n mod PageMerCout=0 then

    MaxPageFiled=n\PageMerCout

   else

    MaxPageFiled=n\PageMerCout+1

   end if

   '判断当前页所在的页码段

   if currentpage mod PageMerCout =0 then

    CurrPageFiled=currentpage\PageMerCout

   else

    CurrPageFiled=currentpage\PageMerCout+1

   end if

   '取得当前页码段的最大页码和最小页码

   MaxPageNo=CurrPageFiled*PageMerCout

   MinPageNo=(CurrPageFiled-1)*PageMerCout+1

   '输出 “第一页 | 前十页 |”

   if currentpage<=1 then

    response.write"第一页&nbsp;"&Separator&"&nbsp;" 

   else

    response.write"<a href="""&url&"?page=1&"&querry&""" class="""&ListLink&""">第一页</a>&nbsp;"&Separator&"&nbsp;" 

   end if

   if CurrPageFiled<=1 then

    response.write"前十页&nbsp;"&Separator&"&nbsp;"       

   else

    response.write"<a href="""&url&"?page="&MinPageNo-PageMerCout&"&"&querry&""" class="""&ListLink&""">前十页</a>&nbsp;"&Separator&"&nbsp;"       

   end if

   '输出当前页码段

   for i=MinPageNo to MaxPageNo

    if i<=n then

     if cstr(i)=cstr(currentpage) then

      response.write "<b>"&i&"</b>"&"&nbsp;"&Separator&"&nbsp;"

      else

       response.write"<a href="""&url&"?page="&i&"&"&querry&""">"&i&"</a>&nbsp;"&Separator&"&nbsp;"  

     end if

    end if

   next

   '输出 “后十页 | 最后页”

   if CurrPageFiled>=MaxPageFiled then

    response.write"后十页&nbsp;"&Separator&"&nbsp;"       

   else

    response.write"<a href="""&url&"?page="&MaxPageNo+1&"&"&querry&""" class="""&ListLink&""">后十页</a>&nbsp;"&Separator&"&nbsp;"       

   end if

   if currentpage>=n then

    response.write"最后页&nbsp;"  

   else

    response.write"<a href="""&url&"?page="&n&"&"&querry&""" class="""&ListLink&""">最后页</a>&nbsp;"  

   end if

 end select

end sub

%>

 

  1. 1
  2. 2