-->ColdFusion 初级教程-->动态HTML表单

ColdFusion

后页 前页
目录
北极星书库
动态HTML表单


动态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属性的值对应于数据库中每个组织的记录主关键字。


如果用户选择了ShapewareBankBoston两项,则Form字段SelectOrgs的值为“1913.”。如果在下面的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.">


如果用户选择了ShapewareBankBoston两项,则Form字段SelectOrgs的值为’ShapeWare,Inc.’,’BankBoston’


注意:你必须在SQL语句中使用ColdFusionPreserveSingleQuotes函数,以防止ColdFusionForm字段值中的单引号进行转换:


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。用户选择了redgreen,则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.">


如果用户选择了ShapewareBankBoston两项,则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.">


如果用户选择了ShapewareBankBoston两项,则Form变量SelectOrgs的值为’ShapeWare,Inc.’,’BankBoston’


与多选按钮一样,对数据库中的字符串型字段执行查询时,要使用PreserveSingleQuotes函数:


SELECT *


FROM Organizations


WHERE OrganizationName IN (#PreserveSingleQuotes(SelectedOrgs)#)


使用上面的语句,对数据库实际执行的查询为:


SELECT *


FROM Organizations


WHERE OrganizationName IN (‘ShapeWare, Inc.’,’BankBoston’)


后页
前页
目录
北极星书库