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。