在 ColdFusion 中提交具有特殊字符的表单
Submitting a form in ColdFusion that has special characters
我有一个表单,其中包含带有用户输入数据的文本框和文本区域。我正在使用带有 cfquery 标记的简单 ColdFusion 操作页面将数据提交到我的数据库。
<cfquery name="add_ticket" datasource="#datasource#">
INSERT INTO service_ticket(end_user, customer_id, ticket_id, company_name, service_description, service_date, status, customer_signature, technician_signature, materials, ticket_type, equipment, discount, percent_discount, material_subtotal, material_tax, material_shipping, material_total, billable_service_total, tax_rate, grand_total, equipment_id, equipment_name)
VALUES("", '#get_customer.customer_id#', "#ticketnum#", "#url.customer_name#", "#url.description# - #get_equipment.equipment_name#", #CreateODBCDateTime(Now())#, "In-progress", "0", "0", "0", "#url.TT#", "0", '0.00', '0', '0.00', '6.625', '0.00', '0.00', '0.00', '#subscriber.tax_rate#', '0.00', "#get_equipment.id#", "#get_equipment.equipment_name#")
</cfquery>
我偶尔会 运行 提交此查询时出错,因为某些列的值包含特殊字符。
例如,company_name 的值可能是:Smith & Johnson, LLC。
ColdFusion 代码一旦遇到 & 符号就会中断。我试过用单引号和双引号以及
将值括起来
<cfqueryparam value="#url.company_name#" cfsqltype="cf_sql_longvarchar" />
但似乎无济于事。
有没有更好的方法来处理这种情况?
我目前正在运行安装 Lucee 服务器。
你有选择。
您可以将表单更改为如下形式:
<form action = actionpages/add_ticket_maintenance.cfm
target = "_blank"
method = "post">
这会将表单提交到单独的 window 或选项卡。在您的操作页面上,您必须使用 form
范围而不是 url
范围。
或者,您可以使用 EncodeForUrl 函数对 url 变量进行编码。您的选择。
阅读您的评论后,我现在明白问题出在哪里了。您的问题的解决方案是在使用 javascript.
调用操作页面时使用 ColdFusion 函数 encodeForURL()
从
更改您的代码
window.open(href='actionpages/add_ticket_maintenance.cfm?TT=commercial&equipment_id=#id#&customer_name=#customer_name#&description=Equipment Maintenance&end_user=Scheduled maintenance', "_self");
到
window.open(href='actionpages/add_ticket_maintenance.cfm?TT=commercial&equipment_id=#id#&customer_name=#encodeForURL(customer_name)#&description=Equipment Maintenance&end_user=Scheduled maintenance', "_self");
我有一个表单,其中包含带有用户输入数据的文本框和文本区域。我正在使用带有 cfquery 标记的简单 ColdFusion 操作页面将数据提交到我的数据库。
<cfquery name="add_ticket" datasource="#datasource#">
INSERT INTO service_ticket(end_user, customer_id, ticket_id, company_name, service_description, service_date, status, customer_signature, technician_signature, materials, ticket_type, equipment, discount, percent_discount, material_subtotal, material_tax, material_shipping, material_total, billable_service_total, tax_rate, grand_total, equipment_id, equipment_name)
VALUES("", '#get_customer.customer_id#', "#ticketnum#", "#url.customer_name#", "#url.description# - #get_equipment.equipment_name#", #CreateODBCDateTime(Now())#, "In-progress", "0", "0", "0", "#url.TT#", "0", '0.00', '0', '0.00', '6.625', '0.00', '0.00', '0.00', '#subscriber.tax_rate#', '0.00', "#get_equipment.id#", "#get_equipment.equipment_name#")
</cfquery>
我偶尔会 运行 提交此查询时出错,因为某些列的值包含特殊字符。
例如,company_name 的值可能是:Smith & Johnson, LLC。
ColdFusion 代码一旦遇到 & 符号就会中断。我试过用单引号和双引号以及
将值括起来<cfqueryparam value="#url.company_name#" cfsqltype="cf_sql_longvarchar" />
但似乎无济于事。
有没有更好的方法来处理这种情况?
我目前正在运行安装 Lucee 服务器。
你有选择。
您可以将表单更改为如下形式:
<form action = actionpages/add_ticket_maintenance.cfm
target = "_blank"
method = "post">
这会将表单提交到单独的 window 或选项卡。在您的操作页面上,您必须使用 form
范围而不是 url
范围。
或者,您可以使用 EncodeForUrl 函数对 url 变量进行编码。您的选择。
阅读您的评论后,我现在明白问题出在哪里了。您的问题的解决方案是在使用 javascript.
调用操作页面时使用 ColdFusion 函数encodeForURL()
从
更改您的代码window.open(href='actionpages/add_ticket_maintenance.cfm?TT=commercial&equipment_id=#id#&customer_name=#customer_name#&description=Equipment Maintenance&end_user=Scheduled maintenance', "_self");
到
window.open(href='actionpages/add_ticket_maintenance.cfm?TT=commercial&equipment_id=#id#&customer_name=#encodeForURL(customer_name)#&description=Equipment Maintenance&end_user=Scheduled maintenance', "_self");