2010-04-27 4 views
3

J'ai une forme simpleColdfusion Composants: - L'argument passé à la fonction est pas de type numérique

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> 

Maintenant, il y a ce cfc appelé Registr.cfc dans la Le dossier "forms" qui a une fonction d'insertion appelée "putNUsr" le code pour "Registr.cfc" est comme suit.

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

Je suis en mesure de remplir la base de données avec les données si je ne pas utiliser le champ de formulaire « note » qui est numérique. Sinon je reçois l'erreur comme suit: -

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. 

PRIERE AIDE S Vali

Répondre

1

La valeur par défaut (premier) élément de l'option de votre note de sélection passe une chaîne vide au composant putNUsr. Une chaîne vide n'est pas numérique et échoue donc à la validation du type.

Vous devrez ajouter une logique supplémentaire dans votre composant putNUsr pour résoudre ce problème ou simplement définir l'option de notation par défaut dans votre formulaire sur 0 (à titre d'exemple).

4

Vous avez défini l'ordre des paramètres dans votre fonction en tant que mot de passe, note, nom d'utilisateur mais en les transmettant dans le nom d'utilisateur, mot de passe, classement.

Vous avez l'option avec ColdFusion comme passant dans les paramètres en tant que paramètres nommés par exemple putNUsr (nom d'utilisateur = 'moi', mot de passe = 'letmein', note = 5). Lorsque vous faites cela, vous pouvez les transmettre dans n'importe quel ordre

+0

vous pouvez également faire: rip747

2

Gary a déjà trouvé votre bug. Une autre chose à propos de la note est que vous pourriez l'envelopper dans la fonction Val() qui vous donnera 0 pour une chaîne vide ...

0

J'ai trouvé le même problème dans le code. Il a été résolu lorsque j'ai remplacé le paramètre 'Password' par un autre nom comme 'PasswordVal'. Pour une raison quelconque, Coldfusion ne lit pas le paramètre 'Mot de passe' et lance l'erreur. Si vous changez le nom du mot de passe par un autre nom, le code commencera à fonctionner.

+0

Si tel est le cas (je ne l'ai pas testé) qui est un problème différent. Le problème original était dû au fait de passer les paramètres dans le mauvais ordre, c'est-à-dire en passant une chaîne quand un nombre était attendu à la place. – Leigh