ColdFusion 4 变量

变量的创建

变量的创建
ColdFusion中,一个变量就是分配了一个值的参数,变量的使用存在于 ColdFusion
用程序的方方面面,不使用变量而开发应用程序是不可想象的。例如,在处理表单输入
时,要用变量将表单中的数据传递给ACTION属性所指定的网页。这种变量也被称为动态
参数。
变量的创建
用CFSET创建变量
创建变量的最简单的方法是用CFSET标签,你可以在应用程序的任何地方使用CFSET标签,
所创建的变量可以在同一文件中该标签后面的任何位置引用。只需指定变量名,并分配
一个静态值或一个参数,或表达式。其语法为:
<CFSET VariableName = Value, Parameter, or Expression>
例1:静态值
<CFSET FirstName = “Jack”>
此例创建了一个变量 FirstName,其值为静态值Jack,注意变量的值为字符串时要使用
双引号。再如,创建一个变量UserNumber,其值为数26:
<CFSET UserNumber=26>
例2:动态参数
<CFSET CurrentUserID=GetUserID.User_ID>
例中,GetUserID是一个 数据库查询操作的查询名,User_ID是所查询的一个字段名。此
例定义了变量CurrentUserID,其值为一个 数据库查询结果的User_ID字段的值。再如:
<CFSET UserDescription = “#UserName# is a wonderful person.”>
其中UserName是另一个变量。
例3:表达式
你可以用CFSET创建一个变量,将一个表达式的值分配给它,如:
<CFSET TotalValue = 2*(4+5)>
<CFSET Pay=”John’s take home pay is”&(TotalValue-1000)>
注意:在 ColdFusion中,变量没有类型之分,也就是说,你不需要指定变量值的数据类
型。
检测变量的存在
在使用一个变量之前,你可以用函数IsDefined检测它是否存在。例如,下面的例子检
测名为Order_ID的变量是否存在:
<CFIF Not IsDefined(“FORM.Order_ID)>
<CFLOCATION URL=”previous_page.cfm”>
</CFIF>
如果你试图使用一个没有定义的变量, ColdFusion将无法处理该文件。


用CFPARAM创建缺省变量

用CFPARAM创建缺省变量
创建变量的另一个方法是使用CFPARAM标签,该标签先检测变量是否存在,如果该变量
不存在,则提供一个缺省值。CFPARAM标签的语法为:
<CFPARAM NAME=”VariableName” DEFAULT=”DefaultValue”>
根据不同的需要,使用CFPARAM标签的方式有两种:
·只提供NAME属性,检测所必需的变量是否存在,如果不存在, ColdFusion
Server停止处理该文件 。例如,下面的语句指出,该文件需要两个变量StartRow和
RowsToFetch,处理才能继续进行:
<CFPARAM NAME=”Form.StartRow”>
<CFPARAM NAME=”Form.RowsToFetch”>
如果包含这两个标签的文件被调用,但没有提供两个变量中的任一个,则会发生错误,
文件被停止处理。
·同时提供NAME属性和DEFAULT属性,检测一个可选的变量是否存在,如果存在,
则处理继续进行,该变量的值不作改变;如果变量不存在,则创建该变量,赋值为
DEFAULT属性所提供的值。例如:
<CFPARAM NAME=”cookie.SearchString” DEFAULT=”temple”>
你可以用CFPARAM标签代替分支语句,为URL及Form变量设置缺省值。
在网页中显示变量及井号的使用
要在网页中显示一个变量,需把变量包含在CFOUTPUT标签中,例如:
<CFOUTPUT>
Your favorite color is #Clint.FavoriteColor#.
</CFOUTPUT>
注意,在CFOUTPUT标签内,要始终把变量名括在井号(#)中。这表示该变量名要被当
作动态参数来计算其值, ColdFusion将输出变量的值而不是变量名本身。
当要区分一个字符串是变量还是文本时,需要使用井号,以表示该位置要用变量的值来
代替。例如:
<CFQUERY NAME=”search” DATASOURCE=”Company”>
Select * From Employees Where LastName=’#Form.LastName#’
</CFQUERY>
在CFSET标签中,不要滥用井号,例如,不要用<CFSET x=#Cos(0)#+>;而要用
<CFSET X=Cos(0)+1>
由于井号在 ColdFusion中有特殊用途,要表示井号本身时,需用两个连续的井号来表示。


变量命名规范


变量命名规范
ColdFusion变量及form字段的命名应遵循如下规范:
·变量名必须以字母开头,后面可以跟任意多个字母,数字,或下划线 。
·变量名中不能包含空格和特殊字符。例如,UserName_1,UserName_2,UserName
是合法的命名,1stUset,WhatAName!,和User-Name都是非法的变量名。
·对字段名和变量名,应使用描述性的名字,而不是简写。这使其他人更容易读
懂你的程序,也帮助你自己记住该变量的用途。
·注意,在同一个CFM文件中,变量名和查询名不能相同。
· ColdFusion变量不区分大小写。
变量的引用范围
你已经注意到,在上面的某些例子中,变量名带有前缀,下面就将讨论这方面的内容。
ColdFusion变量没有数据类型之分,但变量有不同的来源(如来自表单,查询等)和不
同的引用范围(如本文件范围内,整个应用程序范围内等)。 ColdFusion用前缀来区分
不同来源或引用范围的同名变量。例如,Form.State表示来自Form提交的变量State,
而URL.State表示来自URL的变量State,这是两个不同的变量。在创建变量时,除非两
个不同范围的变量同名,你不必要使用前缀,但使用前缀使程序更加清晰,并且可提高
处理速度。
下表列出了 ColdFusion中变量前缀的类型,关于这些类型的详细内容将在后文讨论:
变量前缀
类型
使用方法
查询变量
QueryName.variablename
局部变量
Variables.variablename
URL参数变量
URL.variablename
Form字段变量
Form.variablename
Client变量
Client.variablename
Server变量
Server.variablename
Session变量
Session.variablename
应用程序变量
Application.variablename
HTTP
Cookies变量
Cookie.variablename
CGI环境变量
CGI.variablename
当你没有指定变量前缀时, ColdFusion将按如下的顺序搜索该变量:
用CFSET和CFQUERY创建的局部变量
CGI变量
File变量
URL变量
Form变量
Cookie变量
Client变量
注意: ColdFusion不会自动搜索Application变量和Session变量,定义和使用这两种变
量必须用前缀。


变量的种类


变量的种类
以下对 ColdFusion的各种变量进行逐一介绍。
局部变量
局部变量是用CFSET标签和CFPARAM标签所创建的变量的缺省类型。这种变量只能在创建
它的文件中或包含该文件的文件中引用。
查询变量
一旦执行了一个查询,就可以通过查询变量来访问查询的结果。查询变量的前缀是查询
名,变量名即是表中的字段名。例如,你执行了一个名为LookupUser的查询,所查询的
字段之一是名为ID的字段,那么你可以用变量LookupUser.ID来访问查询结果中的ID字
段的值。
URL变量
URL变量以variablename=value的形式追加在URL后面,传递给URL所指的网页,在该网
页中用URL.variablename引用该变量。
Form变量
网页之间传递参数的最常用方法就是用Form变量。当客户在Form字段中输入数据并提交,
其输入的数据以Form变量的形式传递给ACTION属性所指的网页,在该网页中用
Form.variablename引用该变量,variablename即是Form字段的名字。
Cookie变量
Cookie是 服务器端的应用程序(如 ColdFusion)在浏览器中存储信息的一种机制。存储
在浏览器中的Cookie可以返回给 服务器端应用程序。利用Cookie,应用程序可以创建与
某个特定浏览器相关的变量。例如,你可以为背景颜色建立一个Cookie,从而使你的站
点在不同客户的浏览器中具有不同的颜色。
Cookie是与特定站点相关的,当浏览器访问一个特定的站点时,基于该站点的Cookie被
传至 服务器端。
可以用SSL(Secure Sockets
layer)对Cookie进行加密。Cookie将一直存在,直到它们到期或被删除。目前的主流浏
览器都支持Cookie。
 
创建Cookie
标签CFCOOKIE用来建立Cookie,例如:
<CFCOOKIE NAME="User_ID" VALUE="2344"
EXPIRES="100">
这个例子创建了变量Cookie.User_ID,其值为2344,将在100天后到期。
Cookie建立之后,同一站点上的所有 ColdFusion网页均可以引用该Cookie。这意味着你
可以用Cookie在网页间传递参数。注意,Cookie不适于用来存储安全信息,如密码,信
用卡号码等。
注意:如果在创建Cookie的文件中,在CFCOOKIE标签后执行了CFLOCATION标签,则
CFCOOKIE标签创建的Cookie将会丢失。
在网页中使用Cookie
一旦在客户浏览器中存储了Cookie,每当浏览器请求你站点的网页时,Cookie变量会被
自动传给Web 服务器。与其它类型的变量一样,你可以使用前缀来引用Cookie变量的值,
例如:
<CFOUTPUT> #Cookie.User_ID#
</CFOUTPUT>
删除Cookie
要是删除一个Cookie,你可以用CFCOOKIE标签,将EXPIRES属性设为“now”,例如:
<CFCOOKIE NAME="User_ID" VALUE="#User_ID#"
EXPIRES="now">
当浏览器关闭时,这个Cookie会被删除。
Client变量
Client变量是与特定客户相关的变量。当客户在一个应用程序的不同文件间移动(此处
“移动”指客户从一个文件中链接到另一个文件)时,Client变量可以用来维持客户的
状态,识别一个特定的客户。
对一个启动了客户状态管理的应用程序, ColdFusion为每一个请求该应用程序文件的浏
览器建立一个客户记录,客户记录由一个唯一的令牌来标识,令牌存储在客户浏览器的
一个Cookie中。有了客户记录后,就可以在客户记录中定义Client变量,这些变量可在
整个应用程序的任何文件中引用。当客户请求一个文件时, ColdFusion根据浏览器提供
的令牌来选择相应的客户记录,于是所有的Client变量均可以使用。
创建client变量的步骤如下:
在Application.cfm文件的CFAPPLICATION标签中,设置CLIENTMANAGEMENT=”yes”,启
动客户状态管理。(关于Application.cfm文件后文有介绍)
在CFAPPLICATION标签中,通过设置CLIENTSTORAGE属性,选择client变量的存储位置。
其缺省位置在 ColdFusion Administrator中设置,可以是注册表,已存在的数据源,或
Cookies。
用CFSET或CFPARAM创建该变量。例如:
<CFSET Client.FavoriteColor=”Conflower Blue”>
标准Client变量
ColdFusion提供了几个标准Client变量,这些变量有助于记录客户访问你站点的次数和
上次访问的时间等信息。例如,下面的例子显示了客户上次访问你站点的时间:
<CFOUTPUT>
Welcome back to the Web SuperShop, your last visit
was on #DateFormat(Client.LastVisit)#.
</CFOUTPUT>
标准Client变量具有只读属性,你可以访问它们,但不能在程序中设定它们的值。这些
变量包括:
·CFID
·CFToken
·URLToken
·HitCount
·TimeCreated
·LastVisit
不利用Cookie而实现客户状态管理
ColdFusion中,客户状态管理被设计为使用Cookie,这是识别一个客户的标准方法。
你也可以不利用Cookie而实现客户状态管理,要做到这一点,你必须通过隐藏的Form字
段或URL变量,在网页之间传递客户ID(CFID)和客户安全令牌(CFTOKEN),这需要教
高的编程技巧。
Client变量的存储
Client变量的缺省存储位置是系统注册表,你可以用 ColdFusion Administrator改变其
缺省位置,将Client变量存在SQL 数据库或Cookie中。在Application.cfm文件中用
CFAPPLICATION标签的CLIENTSTORAGE属性可以设置Client变量的存储位置,该设置将覆
ColdFusion Administrator的缺省设置。例如:
<CFAPPLICATION NAME="myapplication"
CLIENTMANAGEMENT="Yes"
CLIENTSTORAGE="mydatasource">
如果不设置CLIENTSTORAGE属性, ColdFusion将使用缺省设置。注意,Client变量的存
储机制具有排斥性,当使用某一种存储类型时,其他存储类型的Client变量不可访问。
用Cookie存储Client变量时,应考虑如下的限制因素:
·Netscape Navigator只允许为一个特定主机设置20个Cookie。 ColdFusion使用
了两个Cookie用于CFID和CFTOKEN,并用一个名为CFGLOBALS的Cookie存储客户的全局数
据如HitCount,TimeCreated,和LastVisit。
·Netscape Navigator设定了每个Cookie不能大于4K字节的限制。也就是说你不
能在Cookie中存储过多的数据。
·如果客户浏览器禁止使用Cookie,Client变量将不能工作。
得到Client变量列表
使用函数GetClientVariableslist()可以获得Client变量的列表,该函数返回的是用逗
号隔开的,由CFAPPLICATION所确定的应用程序范围内的Client变量的名字。标准
Client变量不在返回列表中。
删除Client变量
用函数DeleteClientVariable()删除Client变量,例如:
<CFSET
IsDeleteSuccessful=DeleteClientVariable("MyClientVariable")>
该函数只能删除由CFAPPLICATION确定的应用程序范围内的Client变量。
同样,通过 ColdFusion
Administrator中的设置,可以在一个特定的天数之后删除Client变量,对存储在注册
表中的变量,其缺省值是90天,对存储在 数据库中的变量,缺省值是10天。注意,你不
能删除系统提供的标准Client变量。
Application变量和Session变量
Application变量和Session变量是整个应用程序范围内的变量,在应用程序的任何文件
中都可以访问。你要在变量名前面加前缀才能访问这些变量,例如,
“Session.MyVariable”,“Application.MyVariable”。由于它们可在整个应用程序
范围内访问,因此可以利用它们在网页间传递数据。
允许Application变量和Session变量
与Client变量一样,可以用CFAPPLICATION标签允许Application变量和Session变量。
(具体语法请参阅 ColdFusion文档CFML language reference部分)
与Client变量不同的是,Application变量和Session变量始终保存在 服务器的内存中,
这使得它们的存取速度更快。另外,你可以用 ColdFusion Administrator或在
CFAPPLICATION中,设置这两种变量的生存时间。你也可以完全禁止Application变量和
Session变量。
Session变量
与Client变量一样,Session变量与某个特定的客户相关,它也需要一个客户ID,并始
终与客户ID连系在一起。当客户第一次请求一个 ColdFusion应用程序文件时,即建立一
个Session,Session有一定的生存时间,如果在限定的时间内客户没有向 服务器发出请
求,则该Session结束。
如果两个客户连接到 服务器上的同一个应用程序,这是两个独立的Session,每个客户
都有自己的Session变量,它们可能有不同的值,客户不能访问别人的Session变量。
Session变量适于存储与特定客户有关的全局性信息。当客户第一次请求网页时,有关
信息被初始化在Session变量中,客户访问其它网页时,这些信息仍可以直接使用。
要允许Session变量,可在Application.cfm文件的CFAPPLICATION标签中设置
SESSIONMANAGEMENT
Session变量的生存期
Session变量有一个特定的生存期,正是这个生存期定义了一个“Session”。当你在一
个Session变量的生存期内访问它时,该变量可以访问,如果超过了生存期,该变量将
不再存在。
Session变量的缺省过期时间是20分钟,即如果浏览器在20分钟内没有与 服务器联系,
该Session将被结束。你可以用 ColdFusion Administrator改变这一缺省设置。
你也可以用CFAPPLICATION标签的SESSIONTIMEOUT属性来设置Session变量的过期时间,
这将覆盖Administrator的缺省设置。
Application变量
Application变量也是可以在整个应用程序范围内访问的变量。与Session变量不同的是,
Application变量不针对特定的客户,它不需要与特定的客户ID相关联,一个应用程序
的所有客户可以访问同一个Application变量。这种变量适于存储应用程序级的不与特
定客户相关的,由所有客户共同使用的数据。
这里有必要解释一下什么是“应用程序”。在 ColdFusion中,通过在Application.cfm
文件的CFAPPLICATION标签中设置NAME属性,为应用程序指定一个应用程序名,所有具
有相同应用程序名的文件属于同一个应用程序,而同一个应用程序的所有文件共享所有
的Application变量,这些变量对所有的客户都相同。(关于Application.cfm文件及
“应用程序”的定义,后文有更多叙述)
Application变量的生存期
应用程序也有一定的生存期,当第一个访问者请求一个应用程序中的某个文件时,
ColdFusion初始化该应用程序,如果在限定的时间内没有客户再请求该应用程序的文件,
则该应用程序被结束,Application变量不再存在。
Application变量的缺省过期时间是2天。你可以用 ColdFusion Administrator改变这个
缺省值。你也可以用CFAPPLICATION标签的APPLICATIONTIMEOUT属性设置Application变
量的过期时间,从而覆盖Asministrator的缺省设置。
注意:使用Application变量和Session变量时,必须使用前缀。
Server变量
Server变量可以在当前Web 服务器所服务的所有应用程序中,由所有的客户引用,直到
ColdFusion Server关闭。
Server变量适于存储不经常改变的,可以被多个客户和多个应用程序共享的数据。你可
以用Server变量存储运行在你站点上的所有应用程序都需要的信息,例如关于某个数据
源的信息。
ColdFusion带有下列内建的Server变量:
·Server. ColdFusion.ProductName—--返回 ColdFusion产品名。
·Server. ColdFusion.ProductVersion---返回 ColdFusion的版本信息。
·Server. ColdFusion.ProductLevel---返回 ColdFusion的产品等级信息。
·Server. ColdFusion.SerialNumber---返回 ColdFusion的序列号。
·Server.OS.Name---返回 服务器操作系统的名字。
·Server.OS.AdditionalInformation---返回关于操作系统的附加信息。
·Server.OS.Version---返回 服务器操作系统的版本信息。
·Server.OS.BuildNumber---返回 服务器操作系统的建立号。
注意:Server变量具有读-写属性,小心不要覆盖了内建的Server变量。
 
 
CGI环境变量
每当浏览器向Web 服务器请求服务时,就会创建一系列环境变量,有些由浏览器创建,
有些由 服务器创建。这些变量称为 CGI变量,用前缀“ CGI”来引用(既使 服务器使用
API而不是 CGIColdFusion相通信)。
环境变量中是浏览器和 服务器之间对话的一些相关数据,如IP地址,浏览器类型,通过
认证的客户名等。你可以在浏览器所请求的文件中的任何位置引用 CGI环境变量。所有
CGI变量都是只读的。
注意,在你的应用程序中可以引用的 CGI变量与具体的浏览器和Web 服务器软件有关。
检测 CGI变量
因为并非每种浏览器都支持所有的 CGI变量,当测试一个 CGI变量的存在时, ColdFusion
总是返回TRUE,既使浏览器并不支持该变量。避免这种情况的方法是检测一个空字符串,
而不是检测逻辑值,例如:
<CFIF CGI. varname IS NOT "">
CGI variable exists
<CFELSE>
CGI variable does not exist
</CFIF>
服务器 CGI变量
下表列出了由 服务器创建的最常用的 CGI变量(并非每种浏览器都支持这些变量):
服务器 CGI变量
变量
描述
SERVER_SOFTWARE
响应请求的 服务器软件的名字和版本。格式:名字/版本。
SERVER_NAME
服务器的主机名,DNS别名,或IP地址。
GATEWAY_INTERFACE
服务器所遵循的 CGI规范的版本。格式: CGI/版本。
SERVER_PROTOCOL
这次请求所使用的协议的名字和版本。格式:protocol/版本
SERVER_PORT
请求传至的端口号。
REQUEST_METHOD
请求服务时使用的方法,对HTTP是Get,Head,Post等。
PATH_INFO
由浏览器提供的特殊路径信息。访问脚本可以使用虚拟路径,后面跟以特殊路径信息,
该信息存在PATH_INFO中。
PATH_TRANSLATED
服务器转换过的PATH_INFO,虚拟路径映射为物理路径。
SCRIPT_NAME
指向要执行的脚本的虚拟路径,用于自引用的URLs.
QUERY_STRING
跟在URL中“?”后面的查询信息。
REMOTE_HOST
请求服务的主机名。如果 服务器不知道这项信息,它将创建REMOTE_ADDR,而不是
REMOTE_HOST。
REMOTE_ADDR
请求服务的远程主机的IP地址。
AUTH_TYPE
如果 服务器支持客户认证,并且脚本受保护,此变量包含基于特定协议的认证方法。
REMOTE_USER
AUTH_USER
如果 服务器支持客户认证,并且脚本受保护,此变量包含已认证的客户名。
REMOTE_IDENT
如果HTTP 服务器支持RFC931标识,这个变量被设置为远程的客户名。
CONTENT_TYPE
对带有附加信息的查询,如HTTP POST和PUT,此变量指出附加信息的类型。
CONTENT_LENTH
客户提供的信息的长度。
客户 CGI变量
下表列出了由浏览器创建后传递给 服务器的,最常用的 CGI环境变量:
客户 CGI变量
变量
描述
HTTP_REFERER
引用的文档。这是链接所来自的文档或提交Form数据的文档。
HTTP_USER_AGENT
客户当前使用的浏览器。格式:软件/版本库/版本。


利用URL和Form传递变量


利用URL和Form传递变量
上文中已讲到,利用Client变量,Session变量,Application变量等,可以在不同的网
页之间传递数据,下面介绍利用URL和FORM来传递变量的方法。这两种方法可以在网页
之间传递局部变量。
利用URL传递参数
你可以把参数附加在URL中,传递给该URL所指向的目标文件。用一个问号将要传递的参
数与URL的文件地址隔开,在问号后面追加上变量名及其值,于是在目标文件内就可以
引用该变量,这种变量即前文所述的URL变量。例如:
<A HREF="example.cfm?user_id=5&color=#mycolor#">
在这个例子中,变量user_id,值为5,和变量color,值为表达式#mycolor#的值,被传
递给超链接所指的文件example.cfm。
在目标文件example.cfm中,你可以用URL.user_id和URL.color的形式来引用这两个变
量,如:
<CFOUTPUT>
Your user ID is #URL.user_id# and
your favorite color is #URL.mycolor#.
</CFOUTPUT>
利用URL传参时,应注意以下几点:
·用一个问号将URL地址与要传递的参数隔开。
·用符号“&”将不同的参数隔开。
·不要使用空格,有些浏览器在检测到空格时,会将URL截断。
·不要使用特殊字符,如&,?,.,和#。
如果你要传递的值有可能包含空格和特殊字符,应使用函数URLEncodeFormat(),例
如:
<CFSET FullName="Bob Smith">
<CFOUTPUT>
<A
HREF="printname.cfm?FullName=#URLEncodedFormat(FullName)#">
Click here</A>
</CFOUTPUT>
关于此函数的详细信息请参阅CFML language reference。
用Form传递参数
通常,使用Form接收客户的输入,然后在Action属性所指的文件中利用Form变量得到客
户输入的数据并作处理。你也可以利用隐藏字段从一个网页向另一个网页传递参数。例
如,下面的Form中包含一个名为Customer_ID的隐藏字段,被传递到文件example.cfm中。
<FORM ACTION="example.cfm" METHOD="Post">
<INPUT TYPE="Hidden"
NAME="Customer_ID" VALUE="24">
<INPUT TYPE="Submit" VALUE="Enter">
</FORM>
在文件example.cfm中,你可以用Form.Customer_ID的形式引用该变量。
也可以用隐藏字段传递动态参数,如查询结果等,例如:
<FORM ACTION="example.cfm" METHOD="Post">
<CFOUTPUT QUERY="GetCustomer">
<INPUT TYPE="Hidden" NAME="Customer_ID"
VALUE="#Customer_ID#">
</CFOUTPUT>
<INPUT TYPE="Submit" VALUE="Enter">
</FORM>
小节:
本章介绍了 ColdFusion的变量,其要点是各种变量的引用范围和生存期,另外要注意井
号的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值