2016-05-17 15 views
2

ColdFusionコードに問題があります。私はcfloopを使用してオプションを設定する単純なHTML選択フォームを作成しようとしています。それは動作し、オプションを選択すると、そのオプションがdbから取り出されます。一度それを行うと、以前に選択されたオプションだけが利用可能です。私は間違って何をしていますか?オプションを選択するとColdFusionオプションが削除される

<!--- Query the DataBase ---> 
<cfparam name="url.colors" default=""> 
<cfif structKeyExists(form, "colordb")> 
    <cfset url.colordb = form.colordb> 
</cfif> 
<cfquery datasource="bentest" name="colors"> 
    SELECT * 
    FROM color_codes 
    <cfif structKeyExists(url,"colordb") and isNumeric(url.colordb)> 
     WHERE id=#url.colordb# 
    </cfif> 
</cfquery> 
<!--- Add Selector for user to select a color ---> 
<div class="selector"> 
    <cfoutput> 
     <form action="?contentId=colorPickdb" name="clr" method="post" class="clr"> 
      <select class="clr" name="colordb" onChange="submit();"> 
       <option selected>Select A Color!</option> 
       <cfloop query="colors"> 
        <option value="#colors.id#">#colors.color#</option> 
       </cfloop> 
      </select> 
     </form> 
    </cfoutput> 
</div> 
<div class="dump"> 
    <!--- Output results of Query ---> 
    <p><cfif structKeyExists(form, "colordb")> 
     <cfoutput query="colors"> 
      #colors.color# <br> 
      #colors.hexvalue# <br><br> 
     </cfoutput> 
     </cfif> 
     <br> 
    </p> 
</div> 
+0

where句WHERE id =#url.colordb#は、オプションを選択するとアクティブになり、ページが送信されるので、その色だけがDBから選択されます。 – RRK

+0

元の質問とは関係ありませんが、これは 'WHERE id =#url.colordb#'のようなsqlのrawクライアント提供の値を使用しないでください。 SQLインジェクションを防ぎ、パフォーマンスを向上させるには、常にcfqueryparamを使用してください。 – Leigh

+0

あなたの質問には関係ありませんが、フォームを送信するためのドロップダウンのonChangeメソッドを使用すると、意図しない迷惑なフォーム提出が頻繁に発生します。 –

答えて

1

ここでは、クエリのクエリを使用できます。

<!--- Query the DataBase ---> 
<cfparam name="url.colors" default=""> 
<cfquery datasource="bentest" name="colors"> 
    SELECT * 
    FROM color_codes 
</cfquery> 
<!--- Add Selector for user to select a color ---> 
<div class="selector"> 
    <cfoutput> 
     <form action="?contentId=colorPickdb" name="clr" method="post" class="clr"> 
      <select class="clr" name="colordb" onChange="submit();"> 
       <option selected>Select A Color!</option> 
       <cfloop query="colors"> 
        <option value="#colors.id#">#colors.color#</option> 
       </cfloop> 
      </select> 
     </form> 
    </cfoutput> 
</div> 
<div class="dump"> 
    <!--- Output results of Query ---> 
    <p> 
     <cfif structKeyExists(form, "colordb")> 
      <cfquery dbtype="query" name="colorSelected"> 
       SELECT * 
       FROM colors 
       WHERE id=#form.colordb# 
      </cfquery> 
      <cfoutput query="colorSelected"> 
       #colorSelected.color# <br> 
       #colorSelected.hexvalue# <br><br> 
      </cfoutput> 
     </cfif> 
     <br> 
    </p> 
</div> 
+0

これは完全に機能しました!どうもありがとうございます! – Benjadock

+1

もちろん、プロダクションコードは 'SELECT *'を使ってはならず、 '' –

関連する問題