我在ColdFusion生锈了,我已经习惯了PHP这么久了。我想做的是这样的事情:
<?php
$id = (isset($_GET['id'])) ? (int)$_GET['id'] : 0;
?>
基本上,检查一个名为id
的url参数,如果它存在,请确保它是一个整数,这样我就可以安全地在数据库查询中使用它。如果它结束为零,那也没关系。
我有:
<cfscript>
if (IsDefined("URL.id") AND IsNumeric(URL.id)) {
id = int(URL.id);
} else {
id = 0;
}
</cfscript>
这很有效,但非常混乱。有更好的方法吗?
答案 0 :(得分:10)
最近版本的ColdFusion也有一个三元条件运算符:
<cfset id = (structKeyExists(URL, "id") and isNumeric(URL.id)) ? int(URL.id) : 0>
答案 1 :(得分:1)
我会使用cfparam。我也明确说明了范围,但这不是必要的。我不会使用IIF()函数,因为它使用了evaluate(),这可能会有问题,我也会出于同样的原因避免使用DE()。在这种情况下,它不会是一个问题,但我在一般原则上避免它们在任何不是绝对必要的情况下。我已经使用CF几年了,现在还没有必要。
<cfparam name="url.id" default="0" />
<cfif isNumeric(url.id)>
<cfset local.id = int(url.id) />
<cfelse>
<cfset local.id = 0 />
</cfif>
答案 2 :(得分:1)
对我来说,确保变量是整数的最简单方法是将变量包装在val()中。
它尝试解析字符串并提取找到的任何整数(在字符串的开头)。如果没有找到,则返回0.
答案 3 :(得分:1)
抱怨提出一个旧线程,但想出了同样的问题并找到了一个简单的解决方案,可以帮助其他人解决这个问题
NumberFormat(URL.id)
您还可以在不同的场景中指定各种面具
格式化数字值:
如果未指定掩码,则返回值为千位分隔符的整数。 如果参数值为“”(空字符串),则返回0.
http://help.adobe.com/livedocs/coldfusion/8/htmldocs/help.html?content=functions_m-r_08.html
答案 4 :(得分:0)
您也可以查看cfparam
。
<cftry>
<cfparam name="url.id" default="0" type="integer">
<cfcatch>
<!--- log? etc --->
<cfset url.id = 0>
</cfcatch>
</cftry>
答案 5 :(得分:-4)
您可以使用IIF
。这很酷。
<cfset id = IIf(IsDefined("URL.id") AND Int(URL.id), Int(URL.id), DE("0"))>