动态网站设计十八般武艺 ASP篇(四)

    大家在学习了脚本语言VBScript的变量、常量和过程的基本概念后,本期将继续向各位介绍VBScript的函数和语法。

    函数和过程一样都是命名了的代码块,但它们却有很大的区别,过程完成程序任务,函数则返回值。我们可以这样理解,过程象一个完整的句子,而函数则象一个单词。举个例子,当你想获取某个数的平方根,你只要将该数传给VBScript的Sqr()函数,此函数会立即返回该数的平方根。如:

A=sqr(9)

    则A=3。熟练掌握脚本语言的函数将给你编写ASP程序带来极大的方便,就以上一期结尾处作者布置给大家的课后练习来说,如果你对脚本语言的函数掌握不够全面,那么解决如此之小的一个问题将很有可能花费你相当大的精力。现在让我们来回顾一下这道课后练习。

  “作者正在用ASP制作一套基于WEB的BBS系统,希望能在其中添加一项特殊功能,即当任何用户登陆该BBS后都能够查阅近七天来所有新发布的信息。”

    如果你不熟悉VBScrip,就不会知道VBScrip本身提供了一个用来取得日期之间的差或和的函数DateSerial,它的语法如下:

DateSerial(year,month,day)

    如果你要指定一个日期,例如:1998年11月10日,那么DateSerial函数中每个参数的取值范围都应该是可接受的,即日的取值应在1和31之间,月的取值应在1和12之间。但是,也可以使用表示某日之前或之后的年、月、日数目的数值表达式为每个参数指定相对日期。以下样例中使用了数值表达式代替绝对日期。在这里,DateSerial函数返回1998年11月10日之前二十年(1990-20)零两个月(11-2)又一天(10-1)的日期:即1978年9月9日。程序如下:

Datep=DateSerial(1998-20,11-2,10-1)

    对于year参数,若取值范围是从0到99,则被解释为1900到1999年。对于此范围之外的year参数,则使用四位数字表示年份(例如1800年)。当任何一个参数的取值超出可接受的范围时,则会适当地进位到下一个较大的时间单位。例如,如果指定了35天,则这个天数将被解释成一个月加上多出来的日数,多出来的日数取决于其年份和月份。但是如果参数值超出-32,768到32,767的范围,或者由三个参数指定(无论是直接还是通过表达式指定)的日期超出了可以接受的日期范围,就会发生错误。

    当我们了解并掌握了函数DateSerial的使用方法后,再来看看作者布置的这道题目,一切就迎刃而解了。下面我将程序中的此部分代码公布如下:itemp=DateSerial(Year(date),month(date),day(date)-7)

itemp=DateValue(itemp)

sql="Select*from message Where message.creatime Between #"&date&"# And #"&itemp&"#"

    在这里我们又接触到了一组函数Year,month,day,它们是用来得到一个日期的年、月、日。date是常数,表示今天日期,而函数DateValue则是将字符串变量转化为日期格式的变量。在本段程序的第三行,我们第一次接触到了标准的SQL查询语句,这句语句是什么意思呢?

  “Select”是标准的SQL数据库查询命令,通过SELECT语句我们可以在数据库中检索数据,并将查询结果提供给用户,此处的“*”表示查询该名为“message”的数据库中的所有记录,而“where”的作用是设定一个查询条件,是为了将数据库中符合条件的记录取出来,“message.creatime”是一个储存了数据库中记录创建日期的变量。将整句语句连起来理解就是:查询名为message的数据库中的所有记录,并将其中创建日期在今天和今天以前七日以内的所有记录存储在变量sql中。可能由于大家第一次接触SQL语句,一时间无法完全理解它的作用,不过不用担心在今后的章节中作者将专门用一期给大家介绍SQL的使用方法。

    通过上面的学习,大家应该已经能够理解函数在程序中的作用,当然我们不必去死背函数,但要做到熟练运用只有一条捷径--多实践。接下来让我们来看看VBScript的基本语法。

    了解编程语言的朋友一定知道在程序中控制程序流程的语句主要可以分为条件语句和循环语句,在VBScript中可使用以下条件语句:If...Then...Else语句

SelectCase语句

    If...Then...Else语句用于计算条件是否为True或False,并且根据计算结果指定要运行的语句。通常,条件是使用比较运算符对值或变量进行比较的表达式,If...Then...Else语句可以按照需要进行嵌套。

    让我们来创建两个范例文件:if1.asp和if2.asp

    将以下语句剪贴到记事簿中,并保存为if1.asp(注意:请将程序中“<”后的空格去掉)

  < html>
  < head>
  < TITLE>if1.asp< /TITLE>
  < /head>< body bgcolor="#FFFFFF">
  < form action="if2.asp" method=get>
  Your First Name< INPUT NAME="FirstName" MaxLength=20>< p>
  Your Last Name< INPUT NAME="LastName" MaxLength=20>< p>
  < INPUT TYPE=submit>< INPUT TYPE=reset>
  < /form>
  < /body>
  < /html>

    将以下语句剪贴到记事簿中,并保存为if2.asp

  < html>
  < head>
  < TITLE>ifrespond.asp< /TITLE>
  < /head>

  < % fname=request.querystring("Firstname")
  lname=request.querystring("Lastname")
  If fname="George" and lname="Washington" then %>
  Hi.You must be the first president!
  < % else %>
  Hi!Nice to Meet You
  < %end if %>
  < /body>
  < /html>

    asp1.asp产生一个文本输入框,要求用户输入姓、名,如下图:

asp04a.gif (1224 bytes)

    asp2.asp则是用IF语句判断用户输入的姓名是否为揋eorgeWashington?并做出相应的反馈。在此我们遇到了一个ASP的内建对象request,通过使用request对象可以访问任何用HTTP请求传递的信息,包括从HTML表格中用POST方法或GET方法传递的参数、cookie和用户认证。而QueryString集合检索HTTP查询字符串中变量的值,HTTP查询字符串由问号(?)后的值指定。如:

http://localhost/if2.asp? Firstname=George & Lastname=Washington

    生成值为"Firstname=George&Lastname=Washington"的变量名字符串。关于ASP对象作者将在今后的几篇里重点讲述。

    If...Then...Else语句的一种变形允许您从多个条件中选择,即添加ElseIf子句以扩充If...Then...Else语句的功能,使您可以控制基于多种可能的程序流程。

    我们将asp2.asp的程序部分扩充如下:

Hi.You must be the first president!

Hi.You must be the actor president!

Hi.You must be the peanut farmer president!

Hi.Your name reminds me of someone, but I am not sure who!

Hi!Nice to Meet You

    可以添加任意多个ElseIf子句以提供多种选择。但使用多个ElseIf子句经常会使程序变得很累赘。在多个条件中进行选择的更好方法是使用SelectCase语句。

    SelectCase结构提供了If...Then...ElseIf结构的一个变通形式,可以从多个语句块中选择执行其中的一个。SelectCase语句提供的功能与If...Then...Else语句类似,但是可以使代码更加简练易读。SelectCase结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个Case的值比较。如果匹配,则执行与该Case关联的语句块,我们同样可以用SelectCase语句来写asp2.asp文件:

    请注意SelectCase结构只计算开始处的一个表达式,并且只计算一次,而If...Then...ElseIf结构计算每个ElseIf语句的表达式,这些表达式可以各不相同。因此仅当每个ElseIf语句计算的表达式都相同时,才可以使用SelectCase结构代替If...Then...ElseIf结构。SelectCase语句也是可以是嵌套的,每一层嵌套的SelectCase语句必须有与之匹配的EndSelect语句。