Компоненты Coldfusion: - аргумент, переданный функции, не имеет числовой тип - PullRequest
3 голосов
/ 27 апреля 2010

У меня есть простая форма

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" есть этот cfc с именем Registr.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>

Я могу заполнить БД данными, если не использую поле формы «рейтинг», которое является числовым В противном случае я получаю ошибку следующим образом: -

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 ПОМОГИТЕ -С Вали

Ответы [ 4 ]

4 голосов
/ 27 апреля 2010

Вы определили порядок параметров в вашей функции как пароль, рейтинг, имя пользователя, но вы передали их в порядке имени пользователя, пароля, рейтинга.

У вас есть возможность с ColdFusion передать параметры в виде именованных параметров, например putNUsr (username = 'me', пароль = 'letmein', rating = 5) Когда вы сделаете это, вы можете передать их в любом порядке

2 голосов
/ 27 апреля 2010

Гэри уже нашел вашу ошибку. Еще одна вещь, касающаяся рейтинга, - вы можете обернуть его в функцию Val (), которая даст вам 0 для пустой строки ...

1 голос
/ 27 апреля 2010

Элемент опции по умолчанию (первый) в выбранном вами рейтинге передает пустую строку компоненту putNUsr. Пустая строка не является числовой и, следовательно, не проходит проверку типа.

Вам нужно будет добавить некоторую дополнительную логику в компонент putNUsr для решения этой проблемы или просто установить для параметра оценки по умолчанию в вашей форме значение 0 (в качестве примера).

0 голосов
/ 31 декабря 2013

Я обнаружил ту же проблему в коде. Это было решено, когда я заменил параметр «Пароль» другим именем, например «PasswordVal». По какой-то причине Coldfusion не читает параметр с именем «Пароль» и выдает ошибку. Если вы измените имя пароля на какое-то другое имя, код начнет работать.

...