目录
北极星书库
动态HTML表单在Web应用程序中操纵数据库的最重要的工具之一。动态表单是利用数据库查询结果和CFML标签动态生成的表单。你可以通过动态表单保证数据的完整性,加快编码速度,以及在数据库表格之间建立联系。
下面的例子利用对表parks的查询结果,动态地建立一个选择列表:
<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_ID,在example.cfm文件中可以使用这个参数。其他表单元素可以用同样的方法动态地建立。
在HTML表单中使用多选按钮和多选列表
当一个HTML表单中包含一列同名的多选按钮或一个多选列表框时,用户的输入被传递为用逗号隔开的一列被选值。
注意,如果用户没有作任何选择,则没有变量被创建。这有可能导致SQL INSERT语句不能正确执行,解决这个问题的办法是强制用户必须作出选择(用隐含字段),或者使用动态SQL。
多选按钮
当你在表单中为一列多选按钮指定同一个名字时,相应Form变量的值是用逗号隔开的一列值。这些值可以是数字,也可以是字符串。这两种类型的值在处理时有点差别。
假设你想为用户提供一列组织名,让用户通过多选按钮选择一个或多个组织。然后通过查询返回被选组织的详细信息。可以使用如下的语句:
Select one or more companies to get information on:
<INPUT TYPE="checkbox"
NAME="SelectedOrgs"
VALUE="5">
Mobil Corporation<BR>
<INPUT TYPE="checkbox"
NAME="SelectedOrgs"
VALUE="19">
Shapeware, Inc.<BR>
<INPUT TYPE="checkbox"
NAME="SelectedOrgs"
VALUE="13">
BankBoston<BR>
<INPUT TYPE="hidden"
NAME="SelectedOrgs_required"
VALUE="You must select at least one organization.">
注意虽然显示给用户的文本是组织的名字,但每个多选按钮的VALUE属性的值对应于数据库中每个组织的记录主关键字。
如果用户选择了Shapeware和BankBoston两项,则Form字段SelectOrgs的值为“19,13.”。如果在下面的SQL语句中使用这个参数:
SELECT *
FROM Organizations
WHERE Organization_ID IN ( #SelectedOrgs# )
对数据库实际执行的SQL语句为:
SELECT *
FROM Organizations
WHERE Organization_ID IN ( 19,13 )
要查询字符串类型的字段,多选按钮和CFQUERY标签的使用都与数值型字段稍有不同。在上面的例子中,我们根据一个数值型主关键字Organization_ID对数据库进行查询。如果主关键字是字符串型字段”OrganizationName”,则要对代码作如下修改:
多选按钮的VALUE属性中必须加上单引号:
<INPUT TYPE="checkbox"
NAME="SelectedOrgs"
VALUE="’Mobil Corporation’”>
Mobil Corporation<BR>
<INPUT TYPE="checkbox"
NAME="SelectedOrgs"
VALUE="’ShapeWare, Inc.’”>
Shapeware, Inc.<BR>
<INPUT TYPE="checkbox"
NAME="SelectedOrgs"
VALUE="’Bank of Boston’”>
BankBoston<BR>
<INPUT TYPE="checkbox"
NAME="SelectedOrgs_required"
VALUE="You must select at least one organization.">
如果用户选择了Shapeware和BankBoston两项,则Form字段SelectOrgs的值为’ShapeWare,Inc.’,’BankBoston’。
注意:你必须在SQL语句中使用ColdFusion的PreserveSingleQuotes函数,以防止ColdFusion对Form字段值中的单引号进行转换:
SELECT *
FROM Organizations
WHERE OrganizationName IN (#PreserveSingleQuotes(SelectedOrgs)#)
对数据库执行的实际查询为:
SELECT *
FROM Organizations
WHERE OrganizationName IN (‘ShapeWare, Inc.’,’BankBoston’)
多选列表框
ColdFusion将多选列表框(HTML SELECT输入控件,指定属性MULTIPLE)与多选按钮作同样处理,即返回的Form变量值是逗号隔开的一列用户所选值。例如,一个多选列表框包括三项:red,green,blue。用户选择了red和green,则Form变量的值为’red’,’green’。与多选按钮类似,利用多选列表框进行数据库查询也有两种情况:查询数值型数据库字段和查询字符串型数据库字段。
假设你想让用户从一个多选列表中选择组织名,然后通过数据库查询返回被选中组织的详细信息,可以使用如下语句:
Select one or more companies to get more information on:
<SELECT Name="SelectOrgs" MULTIPLE>
<OPTION VALUE="5">Mobil Corporation
<OPTION VALUE="19">ShapeWare, Inc.
<OPTION VALUE="13">BankBoston
</SELECT>
<INPUT TYPE="hidden"
NAME="SelectedOrgs_required"
VALUE="You must select at least one organization.">
如果用户选择了Shapeware和BankBoston两项,则Form变量SelectOrgs的值为19,13。如果这个变量用在下面的SQL语句中:
SELECT *
FROM Organizations
WHERE Organization_ID IN (#SelectedOrgs#)
对数据库实际执行的语句为:
SELECT *
FROM Organizations
WHERE Organization_ID IN (19,13)
假如你想让用户通过多选列表框选择组织名,然后对数据库中的字符串型字段进行查询,可以使用下面的语句:
Select one or more companies to get
more information on:
<SELECT Name="SelectOrgs" MULTIPLE>
<OPTION VALUE="’Mobil Corporation’”>Mobil Corporation
<OPTION VALUE="’ShapeWare, Inc.’”>ShapeWare, Inc.
<OPTION VALUE="’BankBoston’”>BankBoston
</SELECT>
<INPUT TYPE="hidden"
NAME="SelectedOrgs_required"
VALUE="You must select at least one organization.">
如果用户选择了Shapeware和BankBoston两项,则Form变量SelectOrgs的值为’ShapeWare,Inc.’,’BankBoston’。
与多选按钮一样,对数据库中的字符串型字段执行查询时,要使用PreserveSingleQuotes函数:
SELECT *
FROM Organizations
WHERE OrganizationName IN (#PreserveSingleQuotes(SelectedOrgs)#)
使用上面的语句,对数据库实际执行的查询为:
SELECT *
FROM Organizations
WHERE OrganizationName IN (‘ShapeWare, Inc.’,’BankBoston’)
前页
目录
北极星书库