big*_*rav 0 sql coldfusion web
我一直在用他一直在做的网站帮助一个朋友.他负责维护ColdFusion网站.他主要是网页设计人,我的背景是asp.net.
我遇到的问题是他们希望能够将产品添加到购物车.为了快速完成这个,我将使用现有的"添加到篮子"动作.问题在于网站通常使用名为的隐藏字段productId,但快速条目使用ModelID.
我的计划是productID从SQL后端获取,但每次我尝试它都会引发SQL错误.奇怪的是,无论输入的型号如何,错误消息都会显示不同的编号.这是代码
快速输入HTML:
<form action="index.cfm?do=action" method="POST" NAME="quick">
<b>Model Number:</b>
<input type="Text" name="QuickEntryModelNumber" value="" size="8">
<b>Quantity:</b>
<input type="Text" name="Quantity" value="" size="2" maxlength="3"><br>
<input type="hidden" name="wasWholesaler" value="#session.wholesaler#">
<p align="right"><input type="Submit" name="action" value="Add to basket"></p>
</form>
Run Code Online (Sandbox Code Playgroud)
添加到购物篮行动:
<cfif structkeyexists(form,'ProductID')>
<cfparam name="inProductID" type="integer" default = 0>
<cfset inProductID = #form.ProductID#>
<cfelse>
<cfparam name="inProductID" type="integer" default = 0>
<cfquery name="GetID" datasource="#attributes.dsn#">
SELECT P.ProductID
FROM Products P
WHERE P.ModelNumber = #form.QuickEntryModelNumber#
</cfquery>
<cfoutput query="GetID">
<cfset inProductID = #P.ProductID#>
</cfoutput>
</cfif>
Run Code Online (Sandbox Code Playgroud)
基本上我正在检查是否ProductID存在于表单数据中.如果没有ProductId从DB中获取.它抛出的错误是:
[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting the varchar value '088254PC' to data type int.
Run Code Online (Sandbox Code Playgroud)
无论您为模型ID输入什么,varchar值始终为"088254PC".当我取出SQL查询并将其设置productId为静态值时,它正常运行.
我想这是一个指出这个页面乱七八糟的好时机.它在不同时期被20多个不同的人所感动.它需要被抛出并从头开始.我没有数据库布局.叹.任何帮助你们可以抛出我的方式将不胜感激.ColdFusion不是我的事.
您需要将您的字符串括在引号中并更好地使用cfqueryparam,ColdFusion将为您处理引号(并帮助防止SQL注入)
<cfparam name="inProductID" type="integer" default = 0>
<cfquery name="GetID" datasource="#attributes.dsn#">
SELECT P.ProductID
FROM Products P
WHERE P.ModelNumber = <cfqueryparam cf_sql_type="cf_sql_varchar" value="#form.QuickEntryModelNumber#">
</cfquery>
Run Code Online (Sandbox Code Playgroud)
您可能正在将一个整数传递给您的查询,但088254PC数据库中已存在varchar值,这就是您每次都看到相同错误的原因.