2017-09-13 5 views
0

Lorsqu'un utilisateur clique sur la modification d'une ligne spécifique d'une table, je souhaite que les zones de saisie d'une même page soient remplies avec les détails de cette ligne. J'ai essayé mais ça n'a pas marché.Comment définir la valeur d'une requête dans une zone de texte d'entrée

<cfquery name="getDataForEdit" datasource="dsn"> 
    select * from usercardetails where id = '#url.id#' 
</cfquery> 
<cfoutput> 
    <cfset #form.username# = #getDataForEdit.username#> 

</cfoutput> 
+0

Votre chaîne de recherche google est 'champs de formulaire liés à coldfusion'. –

Répondre

2

Essayez cela comme un exemple pour vous y aller ....

<cfquery name="getDataForEdit" datasource="dsn"> 
    select * from usercardetails where id = '#url.id#' 
</cfquery> 

<!--- 
OPTIONAL IMPROVEMENT: You might change your SQL to use CFQueryParam, this will protect against SQL injection 
select * from usercardetails where id = <cfqueryparam cfsqltype="CF_SQL_NUMERIC" value="#url.id#" /> 
---> 

<!--- 
OPTIONAL FOR DEBUGGING: If you uncomment this block it will show you the results of your query. 
<cfoutput><cfdump var="#getDataForEdit#" label="getDataForEdit" expand="No" /><br /></cfoutput> 
---> 

<cfoutput> 

<cfif getDataForEdit.recordcount is 1> <!--- Check that you only get one row back in results ---> 

    <!--- Coldfusion will build forms for you using cfform, but many coders keep away from it, so instead you need to build the HTML of your form yourself. ---> 

    <form action="index.cfm" method="post"> 
     <p><label for="username">Username</label><input type="text" id="username" name="username" value="#getDataForEdit.username#" /></p> 
     <p><input type="submit" id="butty01" name="butty01" value="Go" /></p> 
    </form> 

<cfelseif getDataForEdit.recordcount is 0> <!--- If no results ---> 
    <p>No records found</p> 
<cfelse> <!--- Anything else will mean many results ---> 
    <p>An error occurred (Multiple records with this ID found)</p> 
</cfif> 

</cfoutput> 

J'ai mis des commentaires dans le code autour de quelques améliorations en option.

Notez également que ...

<cfset #form.username# = #getDataForEdit.username#> 

sera vous causer des problèmes.

<cfset username = getDataForEdit.username> 

créerons/définir un nom d'utilisateur variable égale à la valeur de la colonne de nom d'utilisateur dans votre requête. Les # balises ne sont pas nécessaires dans ce contexte. # imprime la valeur d'une variable, vous auriez pu faire cela ...

<cfset username = "#getDataForEdit.username#"> 

qui imprimerait la valeur de la colonne de nom d'utilisateur dans une chaîne de texte (la seule chose dans la chaîne étant la valeur) et la chaîne de texte aurait été affectée au nom d'utilisateur de la variable.

form 

est un mot réservé, car il est une structure (il vaut la peine à la recherche des structures) qui contient toutes les données variables de formulaire affichées sur votre page. Vous pouvez vérifier la forme en utilisant cfdump

<cfoutput><cfdump var="#form#" label="form" expand="No" /><br /></cfoutput> 

Pour imprimer une des valeurs à l'intérieur de la forme que vous pouvez faire

#form.username# 

donc (et très confusément quand vous êtes un débutant) ...

<cfset #form.username# = #getDataForEdit.username#> 

Permet de créer une variable dont le nom correspond à la valeur du nom d'utilisateur du champ de formulaire posté sur votre page et de le remplir avec le nom d'utilisateur de votre requête. Tu ne veux vraiment pas ça.

Continuez. Une fois que vous avez trié quelques concepts de base Coldfusion est un langage agréable à coder.

+1

Tout cela est une bonne information, mais la question comprend la phrase «sur la même page». –

+0

Tous les bons points John, et de bonnes notes sur le # dans la gauche de l'ensemble variable .. pas nécessaire. S'il vous plaît utiliser Benster

+0

@DanBracuk Hahaha ... Très bon point ... –