#forms #validation #coldfusion #textinput
#формы #проверка #coldfusion #textinput
Вопрос:
У меня есть форма для ввода количеств пользователями. Форма имеет проверку на стороне клиента, чтобы убедиться, что значение является целым числом и находится в пределах заданного диапазона. Страница действий имеет проверку на стороне сервера, чтобы убедиться, что значение является целым числом и больше нуля.
Однако один тип значения проходит проверку и вызывает в моих запросах ВСТАВКИ / ОБНОВЛЕНИЯ исключения. Это значение представляет собой целое число со знаком плюс, то есть «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???
Как можно обойти это и правильно проверить ввод моей формы?
Комментарии:
1. время сообщить об ошибке проверки JS? Обновление JS для проверки на стороне клиента cfform давно назрело.
2. Генри, это ошибка CF, а не ошибка JS. Обратите внимание, что вызов isValid() утверждает, что «7 » является целым числом, когда это явно не так. Тем не менее, это ошибка def a CF !
Ответ №1:
isNumeric(form.itemQuantity)
вернет false для «7 «, поэтому, чтобы полностью подтвердить ваш ввод как int, вы можете сделать это
<cfif isNumeric(form.itemQuantity) and IsValid("integer", form.itemQuantity) AND form.itemQuantity GT 0>
Комментарии:
1. Нет, но все целые числа являются числовыми
2. Да, но требуется, чтобы оно проверялось как целое число , чего IsNumeric() не достигнет. IsNumeric() вернет true для 3.14, что не соответствует требованию, чтобы значение было целым числом. Что можно было бы сделать, так это сделать IsNumeric(form.itemQuantity) amp;amp; isValid(«integer», form.itemQuantity), но просто IsNumeric() сам по себе не является допустимым предложением для этого вопроса.
3. Вы правы. Я отредактировал свой ответ, чтобы полностью подтвердить как числовое, так и целое число.
Ответ №2:
Из-за странной и удивительной природы того, что ColdFusion не имеет типов. Он не знает, с каким типом данных вы работаете, и пытается угадать.
Его оценка того, что 7 является допустимым. Проверка, встроенная в ColdFusion, делает много предположений и догадок.
Я бы посоветовал не использовать его и написать свои собственные процедуры проверки, которые можно улучшить, чтобы делать все, что вам требуется.
Например
Пользователь вводит
2,075
Это допустимо или недопустимо. Ну, если у вас есть своя собственная проверка, которую вы можете решить, вы можете сказать, что это целое число и удаленное, или вы можете сказать, что они не могут этого сделать.
Это небольшая предварительная инвестиция, которая окупится в долгосрочной перспективе.
Комментарии:
1. Я согласен. ColdFusion сильно запутывается, когда дело доходит до типов. Например, это невероятно несовместимо с чем-то вроде «1,2»: — isValid(«целое число», «1,2») // ДА — IsNumeric(«1,2») // НЕТ — передача «1,2» в функцию, которая принимает только числовые аргументы (например» type=»numeric» required=»true» />) будет разрешено. Как странно.
Ответ №3:
Оказывается, я могу использовать LSParseNumber() для преобразования его в допустимое целое число. Итак, теперь я тестирую допустимое целое число, затем сбрасываю его с помощью LSParseNumber() перед попыткой вставки в базу данных:
<cfset addItemQty = 0 />
<cfif IsValid("integer", Trim(form.itemQuantity))>
<cfset addItemQty = LSParseNumber(Trim(form.itemQuantity)) />
</cfif>
Я думаю, мне придется перепроектировать проверку на стороне клиента для правильной проверки.
Комментарии:
1. Используете ли вы cfqueryparam? Если да, допустило ли это значение?