Unit 7:建立检索界面

动态使用 Select 控制

使用 Select 编写下拉选菜单,其供选择的内容可以事先知道自己填写,例如,员工信息填写表中性别一项分为男、女,可以用 Select 编写下拉选菜单,其中只有两项可供选择。有时,Select 编写的下拉选菜单的内容是你事先并不知道的,这时候要动态地使用Select 控制。

先讲一个例子,例子中 Select 的内容是从数据库中读出,动态生成的:

<CFQUERY NAME="ParkNames" DATASOURCE="ParkDB">

SELECT ParkName_ID, ParkName FROM Parks

</CFQUERY>

<FORM ACTION="example.cfm" METHOD="Post">

<SELECT NAME="ParkName_ID">

<CFOUTPUT QUERY="ParkNames">

<OPTION VALUE="#ParkName_ID#">#ParkName#

</CFOUTPUT>

</SELECT>

<INPUT TYPE="submit" VALUE="Submit">

</FORM>

在此页生成之前,用户不知道有哪些 ParkName 可供选择,这些 ParkName 是动态产生

的。

创建动态查询

动态查询是指事先没有完整的 SQL 语句,而是动态地决定执行哪一条查询条件。动态查询要借助 ColdFusion 的 CFIF/CFELSEIF/CFELSE tag 来控制 SQL 的结构。大致的结构如下:

<CFQUERY NAME="queryname" DATASOURCE="datasourcename">

...Base SQL statement

<CFIF value operator value >...additional SQL</CFIF>

</CFQUERY>

下面给出一个具体的例子:

<CFQUERY NAME="GetParkList" DATASOURCE="CF 4.0 Examples"> SELECT * FROM Parks WHERE 0=0

<CFIF #ParkName# is not ""> AND ParkName LIKE '%#ParkName#%'

</CFIF>

<CFIF #ParkType# is not "AllTypes"> AND ParkType = '#ParkType#'

</CFIF>

<CFIF #Region# is not "AllRegions"> AND Region = '#Region#'

</CFIF>

<CFIF #State# is not ""> AND State = '#State#'

</CFIF>

</CFQUERY>

WHERE 0=0 是为了在四条 IF 语句都不符合时,SQL 语句不至于出现语法错误。

测试多重条件

ColdFusion 可以支持 SELECT 的多重选择(如同 HTML input 类型中 SELECT 带有MULTIPLE 属性) 。被选择的多个值并排排列,使用“,”来分割。例如有一个多重选择是: red, green, 和 blue。用户选择了 red 和 green ,在表单提交时'red', 'green'被传送到“下一页”。

例如,假如你希望用户从一个 SELECT 中进行多重选择,可供多重选择的内容是从数

据库中读出的。

选择一个以上的公司:

<SELECT Name="SelectOrgs" MULTIPLE>

<OPTION VALUE="5">Mobil Corporation

<OPTION VALUE="19">ShapeWare, Inc.

<OPTION VALUE="13">BankBoston

</SELECT>

如果用户选择了 Shapeware 和 BankBoston 公司,这个 SelectedOrgs 得值将会是 19,13 如果这个选择的参数用于一个 SQL 语句:

SELECT * FROM Organizations

WHERE Organization_ID IN (#SelectedOrgs#)

那么这条语句被送到数据库时是: SELECT * FROM Organizations WHERE Organization_ID IN (19,13)

练习题:

利用第四天建立的数据库,将前一天建立的表单中的 Select 项改为动态 Select。