2011-11-02 36 views
4

我有一個表格供用戶輸入數量。表單具有客戶端驗證,以確保該值是一個整數且在給定範圍內。操作頁面具有服務器端驗證,以確保該值是一個整數並且大於零。爲什麼ColdFusion認爲值「7+」是一個有效的整數值,以及我如何驗證它不是?

但是,一種類型的值通過驗證並導致我的INSERT/UPDATE查詢引發異常。該值是帶加號的整數 - 即「7+」或「12+」。

當進入這樣一個值,ColdFusion的生成的JavaScript驗證拋出一個JavaScript錯誤:

_CF_checkformAddToCart = function(_CF_this) 
{ 
    //reset on submit 
    _CF_error_exists = false; 
    _CF_error_messages = new Array(); 
    _CF_error_fields = new Object(); 
    _CF_FirstErrorField = null; 

    //form element itemQuantity 'INTEGER' validation checks 
    if (!_CF_checkinteger(_CF_this['itemQuantity'].value, false)) 
    { 
     _CF_onError(_CF_this, "itemQuantity", _CF_this['itemQuantity'].value, "Error on itemQuantity, please enter an integer value for quantity that is not greater than 500"); 
     _CF_error_exists = true; 
    } 

    //form element itemQuantity 'RANGE' validation checks 
    if (!_CF_checkrange(_CF_this['itemQuantity'].value, 0.0,500.0, false)) 
    { 
     _CF_onError(_CF_this, "itemQuantity", _CF_this['itemQuantity'].value, "Error on itemQuantity, please enter an integer value for quantity that is not greater than 500"); 
     _CF_error_exists = true; 
    } 
} 

一旦我取消了錯誤彈出窗口,就轉到操作頁面,在那裏我[嘗試]驗證的值,像這樣:

<cfif IsValid("integer", form.itemQuantity) AND form.itemQuantity GT 0> 
    <cfquery> 
     INSERT .... 

但是,如果試...

<cfset x = Int("7+") /> 

... ColdFusion引發錯誤。

是不是一個整數ColdFusion ???

如何解決此問題並驗證我的表單輸入是否正確?

+0

時間來報告JS驗證錯誤?用於cfform客戶端驗證的JS升級早已過期。 – Henry

+0

亨利,這是一個CF錯誤,而不是JS錯誤。請注意,isValid()調用聲明「7+」顯然不是整數。這就是說,它是一個* CF * bug! –

回答

4

isNumeric(form.itemQuantity)將返回「7+」假的,所以完全驗證輸入作爲一個int,你可以做到這一點

<cfif isNumeric(form.itemQuantity) and IsValid("integer", form.itemQuantity) AND form.itemQuantity GT 0> 
+0

因爲不是所有的數字值都是整數,所以進行投票。 –

+2

不,但所有整數都是數字 – Yisroel

+0

是的,但要求是將*驗證爲*,即Numeric()無法實現。 isNumeric()將在3.14中返回true,這不符合值爲整數的要求。可以做什麼是 isNumeric(form.itemQuantity)&& isValid(「integer」,form.itemQuantity) 但簡單地isNumeric()本身不是對此問題的有效建議。 –

0

原來我可以使用LSParseNumber()將其轉換爲有效的整數。

<cfset addItemQty = 0 /> 

<cfif IsValid("integer", Trim(form.itemQuantity))> 
    <cfset addItemQty = LSParseNumber(Trim(form.itemQuantity)) /> 
</cfif> 

我想我得重新設計的前端客戶端驗證:所以,現在我嘗試任何數據庫插入之前測試的是一個有效的整數,然後用LSParseNumber()將其復位正確驗證。

+1

你使用的是cfqueryparam嗎?如果是這樣,它是否允許價值? –

1

由於ColdFusion的無奇怪和奇妙的本質。它不知道你正在使用什麼類型的數據,並試圖猜測。

其評估7+是有效的。內置於ColdFusion中的驗證會做出很多假設和猜測。

我的建議是不使用它,並編寫自己的驗證例程,可以增強您的需求做任何事情。

例如

用戶輸入

這是有效還是無效。那麼,如果你有自己的驗證,你可以決定,你可以確定這是一個整數和遠程的,或者你可以說不,他們不能這樣做。

這是一項小額投資,預計長期投資。

+0

我同意。當談到類型時,ColdFusion變得非常困惑。例如,它與「1,2」類似: - IsValid(「integer」,「1,2」)// YES - IsNumeric(「1,2」)// NO - 傳遞在「1,2」中的函數只允許接受數字參數(例如)。 奇怪。 –

相關問題