2011-11-02 84 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”中的函数只允许接受数字参数(例如)。 奇怪。 –

相关问题