我有一个简单的表格
form.cfm: -
<cfset Registr = createObject("component", "forms.Registr") />
<cfset setFoo = createObject('component','forms.Registr).putNUsr(username,password,rating) />
<form name="regFrm" action="#cgi.script_name#" method="post" onsubmit="submitform();" >
<tr><td>Username:</td>
<td><input type="text" name=" Username" value="#form. Username#" ></td></tr>
<tr><td>Password:</td>
<td><input class="" type="password" name="password" value="#form.password#" ></td></tr>
<tr><td>Rate:</td>
<select name="rating" >
<option value="" ></option>
<cfloop query="qGetReting">
<option value="#rating_id#" <cfif form. rating eq prof_id>selected</cfif> >#rating#</option>
</cfloop>
</select>
</td>
</tr>
</form>
现在在“forms”文件夹中有一个名为Registr.cfc的cfc,它有一个名为'putNUsr'的插入函数,用于'Registr.cfc'代码如下。
<cfcomponent>
<cffunction name="putNUsr" returntype="void" displayname="" output="no">
<cfargument name="password" type="string" required="true">
<cfargument name="rating" type="numeric" required="true">
<cfargument name="username" type="string" required="true">
<cfquery datasource="#application.xyz#" name="q_putNUsr">
insert into
users (username
, password
, rating)
values(
<cfqueryparam value="#arguments. username#" cfsqltype="CF_SQL_VARCHAR" />,
<cfqueryparam value="#arguments.password#" cfsqltype="CF_SQL_VARCHAR" />,
<cfqueryparam value="#arguments.rating#" cfsqltype="CF_SQL_INTEGER" )
</cfquery>
</cffunction>
</cfcomponent>
如果我不使用表单字段“rating”,我可以使用数据填充数据库 是数字。 否则我得到的错误如下: -
The RATING argument passed to the putNUsr function is not of type numeric.
If the component name is specified as a type of this argument, it is possible that either a definition file for the component cannot be found or is not accessible.
麻烦 救命 -S Vali
答案 0 :(得分:4)
您已将功能中的参数顺序定义为密码,评级,用户名,但是您将用户名,密码,评级的顺序传递给他们。
你可以使用ColdFusion选项作为命名参数传递参数,例如putNUsr(username ='me',password ='letmein',rating = 5)。执行此操作时,您可以按任意顺序传递它们
答案 1 :(得分:2)
Gary已经发现了你的错误。关于评级的另一个问题是你可以将它包装在Val()函数中,这将为你提供一个空字符串为0 ...
答案 2 :(得分:1)
您的评级选择的默认(第一个)选项将空字符串传递给putNUsr组件。空字符串不是数字,因此无法进行类型验证。
您必须在putNUsr组件中添加一些额外的逻辑来解决这个问题,或者只是将表单中的默认评级选项设置为0(作为示例)。
答案 3 :(得分:0)
我在代码中发现了同样的问题。当我将参数'Password'替换为'PasswordVal'等其他名称时,它就解决了。出于某种原因,Coldfusion不会读取名为“密码”的参数并抛出错误。如果您通过其他名称更改密码名称,则代码将开始工作。