2013-05-04 73 views
0

我一直在幫他的朋友出去一個他一直在努力的網站。他是維護ColdFusion網站的任務。他主要是一個網頁設計人員,我的背景是asp.net。試圖從SQL中用ColdFusion獲取ID

我遇到的問題是他們希望能夠將產品添加到購物車。爲了快速做到這一點,我打算使用現有的「添加到購物籃」操作。問題在於網站通常使用名爲productId的隱藏字段,但快速條目使用ModelID。

我的計劃是從SQL後端獲取productID,但每次嘗試時都會拋出SQL錯誤。奇怪的是,不管輸入的型號是什麼,錯誤信息都會顯示不同的數字。下面是代碼

快速輸入HTML:

<form action="index.cfm?do=action" method="POST" NAME="quick"> 
    <b>Model Number:</b> 
    <input type="Text" name="QuickEntryModelNumber" value="" size="8">&nbsp;&nbsp;&nbsp; 
    <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> 

添加到購物籃動作:

<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> 

基本上我檢查,看看是否存在於形式的數據ProductID。如果不從數據庫獲取ProductId。它引發的錯誤是:

[Macromedia][SQLServer JDBC Driver][SQLServer]Conversion failed when converting the varchar value '088254PC' to data type int. 

無論您爲模型ID輸入什麼內容,varchar值都始終爲'088254PC'。當我拿出SQL查詢並將productId設置爲靜態值時,它的功能正常。

我想這將是一個很好的時間來指出這個頁面是一團糟。 20多個不同的人在不同的時間受到感動。它需要被拋出並從頭開始。我沒有數據庫佈局。嘆。任何幫助你們可以拋出我的方式將不勝感激。 ColdFusion不是我的東西。

回答

5

您需要附上字符串中的報價和更好的使用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> 

可以路過一個整數到您的查詢中,但數據庫中已存在varchar值088254PC,這就是您每次看到相同錯誤的原因。

+0

非常感謝。我實際上在某個時間點引用了它,但SQL查詢錯誤。但是對於您的建議,我可以將其限制爲SQL查詢並進行修復。萬分感謝。 – bigcrav 2013-05-05 01:38:58