开发者

Coldfusion Components:- The argument passed to the function is not of type numeric

开发者 https://www.devze.com 2022-12-28 12:16 出处:网络
I have a simple form form.cfm:- <cfset Registr = createObject(\"component\", \"forms.Registr\") />

I have a simple form

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>

Now there is this cfc called Registr.cfc in the "forms" folder which has an insert-function called 'putNUsr'the code for 'Registr.cfc' is as follows.

<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>

I am able to populate the DB with the data if I do not use the form field "rating" which is numeric. Else i am getting the error as follows:-

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.

KINDLY HELP -S Vali


You've defined the order of the parameters in your function as password, rating, username but your passing them in in the order username, password, rating.

You do have the option with ColdFusion as passing in the parameters as named-parameters eg putNUsr(username = 'me', password = 'letmein', rating = 5). When you do this you can pass them in in any order


Gary already found your bug. Another thing regarding the rating is you could wrap it in the Val() function which will give you 0 for an empty string...


The default (first) option item of your rating select passes an empty string to the putNUsr component. An empty string is not numeric and therefore fails the type validation.

You will have to put some additional logic into your putNUsr component to address that or simply set the default rating option in your form to 0 (as an example).


I have found the same issue in the code. It was solved when I replace the Parameter 'Password' with other name like 'PasswordVal'. For some reason, Coldfusion does not read the parameter named 'Password' and throw the error. If you change the name of Password by some other name, then code would starts working.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号