Введено как целое число в ColdFusion;очистка переменных - PullRequest
4 голосов
/ 12 августа 2010

Я в ColdFusion ржавый, я так давно привык к PHP. Я хочу сделать что-то вроде этого:

<?php
  $id = (isset($_GET['id'])) ? (int)$_GET['id'] : 0;
?>

По сути, проверьте параметр URL с именем id и, если он существует, убедитесь, что это целое число, чтобы я мог безопасно использовать его в запросах к базе данных. Если он заканчивается нулем, это тоже нормально.

У меня есть:

<cfscript>
if (IsDefined("URL.id") AND IsNumeric(URL.id)) {
    id = int(URL.id);
} else {
    id = 0;
}
</cfscript>

Это работает, но ужасно грязно. Есть ли лучший способ сделать это?

Ответы [ 6 ]

10 голосов
/ 12 августа 2010

Последние версии ColdFusion также имеют троичный условный оператор:

<cfset id = (structKeyExists(URL, "id") and isNumeric(URL.id)) ? int(URL.id) : 0>
1 голос
/ 27 февраля 2015

Извиняюсь за поднятие старой темы, но придумал тот же вопрос и нашел простое решение, которое может помочь другим в этой проблеме

NumberFormat(URL.id)

Существуют также различные маски, которые вы можете указать в различных сценариях

Справочник по ColdFusion

Форматированное числовое значение:

Если маска не указана, возвращает значение в виде целого числа с разделителем тысяч. Если значение параметра "" (пустая строка), возвращает 0.

http://help.adobe.com/livedocs/coldfusion/8/htmldocs/help.html?content=functions_m-r_08.html

1 голос
/ 13 августа 2010

Для меня самый простой способ убедиться, что ваша переменная является целым числом, это обернуть переменную в val ().

Он пытается проанализировать строку и извлечь любое найденное целое число (в начале строки).Если ничего не найдено, возвращается 0.

  • Если TestValue = "234A56? 7 '", Val (TestValue) возвращает 234.
  • Если TestValue = "234'5678'9?'", Val (TestValue) возвращает 234.
  • Если TestValue =" BG234 ", Val (TestValue) возвращает значение 0 (не ошибка).
  • Если TestValue =" 0 "Val (TestValue) возвращает значение 0 (не ошибка).

См. http://cfquickdocs.com/cf8/#Val

1 голос
/ 12 августа 2010

Я бы использовал cfparam.Я также определил бы объем, но это не обязательно.Я бы не стал использовать функцию IIF (), потому что она использует метод valu (), что может быть проблематично, я бы также избегал DE () по той же причине.В этом случае это не будет проблемой, но я избегаю их по общему принципу в любой ситуации, когда это не является абсолютно необходимым.Я использую CF уже несколько лет, и это пока не нужно.

<cfparam name="url.id" default="0" />

<cfif isNumeric(url.id)>
    <cfset local.id = int(url.id) />
<cfelse>
    <cfset local.id = 0 />
</cfif>
0 голосов
/ 12 августа 2010

Вы также можете посмотреть на cfparam.

<cftry>
  <cfparam name="url.id" default="0" type="integer">
<cfcatch>
  <!--- log? etc --->
  <cfset url.id = 0>
</cfcatch>
</cftry>
0 голосов
/ 12 августа 2010

Вы можете использовать IIF. Это круто.

<cfset id = IIf(IsDefined("URL.id") AND Int(URL.id), Int(URL.id), DE("0"))>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...