2012-12-03 67 views
2

我正在使用Coldfusion8如何防止Coldfusion向小數位變量添加小數?

我收到一個項目編號(隨機35 charchater字符串),我需要寫入/檢索到數據庫的Ajax請求。

問題是,當我路過只有數字,如:

23456 

ColdFusion的輸出接收:

23456.0 

如果字符串包含像A12345它工作正常的任何信件。

一些代碼(雖然這並不表明有什麼不工作:

的Javascript:

var btn = $(this).find('input'), 
    putOnRack = btn.jqmData('index'), 
    form = "", 
    service = "../services/handler.cfc", 
    method = "process", 
    returnformat = "JSON", 
    targetUrl = "", 
    formdata = "form_submitted=store_selection&artikelnummer="+putOnRack+"&method="+method+"&returnformat="+returnformat; 

    // pass to AJAX 
    ajaxFormSubmit(form, service, formdata, targetUrl, successHandler, "no", "", returnformat, ""); 

var ajaxFormSubmit = 
    function (form, service, formdata, targetUrl, successHandler, dataHandler, errorHandler, returnformat, type){ 
    $.ajax({ 
     async: false, 
     type: type == "" ? "get" : type, 
     url: service, 
     data: formdata,  
     dataType: returnformat, 
     success: function(objResponse){}, 
     error: function (jqXHR, XMLHttpRequest, textStatus, errorThrown) {} 

ColdFusion中,我通過這個通過process,驗證並建立表格服務器端,然後我傳遞給它獲取包含所有傳遞信息一

`LOCAL.form` 

對象我的數據庫處理程序,所以我的項目數量將在LOCAL.form.artikelnummer

如果我輸出這樣的:

cfdump output="e:\dump.txt" label="catch" var="#LOCAL.form.artikelnummer#"> 

只有一位數字的字符串處理,.0

問題
我怎樣才能確保我最終varchar,而不是數字,傳遞時通過AJAX參數到Coldfusion?

+0

一些代碼(雖然這並不表明有什麼不工作:那麼爲什麼顯示它 – Travis

+0

因爲如果貼過任何代碼的一切,你會寫「表現出一定的代碼」 ;-)其實一旦數據「?從AJAX到達「,錯誤」.0「在那裏,所以我不確定要發佈什麼。 – frequent

回答

2

你可以使用NumberFormat()。示例:

NumberFormat('123.0', '99999')// returns '123' 

第二個參數是一個掩碼,用於確定您的號碼將如何顯示。

+0

好的。我懂了。讓我也試試這個。 – frequent

+0

如果字符串可以包含字母,我從操作推斷,你會想先運行isNumeric()。 –

1

在您的cfquery區塊內使用<cfqueryparam ...>並指定CFSQLType="CF_SQL_INTEGER"。這也將防止SQL注入攻擊(p.s.你應該永不從最終用戶的原始數據傳入您的數據庫)。

推薦閱讀:

  1. cfqueryparam (Coldfusion 8)
  2. Secure your ColdFusion application against SQL injection attacks
+0

嗯。但是如果我沒有進行查詢呢?我用'&foo = bar'發送了一個AJAX調用,'bar'將被映射到'LOCAL.form.artikelnummer',然後當我輸出'123'變成'123.0'而'123A'保持爲'123A'。當我在查詢中使用這個值時,我當然是cfquery-param-ing。但是,當它仍然是一個價值傳遞時,我能做些什麼? – frequent

+0

和好點。我今晚會再試一次。即使我將'cfqueryparam'聲明爲varchar,問題將會被解決,錯誤的'.0'將被視爲2個字符,而不應該有任何。 – frequent

+0

我已經添加了另一個更好地解決您的問題的答案。 – Russ

0

您也可以使用CF中的INT功能。

int(123.456) <!--- returns 123 ---> 

INT是像地板(向下取整)在其他語言

INT()

你需要檢查你的結果,以確保它是否試圖使用是int之前的數或numberFormat或者你會得到一個The value cannot be converted to a number錯誤。

<cfif isNumeric(yourValue)> 
    <cfset yourValue = int(yourValue)> 
</cfif> 
相關問題