【问题标题】:ColdFusion Options removed after selecting option选择选项后删除 ColdFusion 选项
【发布时间】:2016-09-13 14:28:03
【问题描述】:

我的 ColdFusion 代码有问题。我正在尝试使用 cfloop 创建一个简单的 HTML 选择表单来填充选项。它可以工作,当您选择一个选项时,它会从数据库中提取该选项。但是一旦你这样做了,唯一可用的选项就是以前选择的选项。我做错了什么?

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

【问题讨论】:

  • 一旦您选择了一个选项并提交了页面,where 子句 WHERE id=#url.colordb# 就处于活动状态,因此只会从数据库中选择该颜色。
  • 与原始问题无关,但是......永远不要在 sql 中使用原始客户端提供的值,例如 WHERE id=#url.colordb#。始终使用 cfqueryparam 来帮助防止 sql 注入并提高性能。
  • 与您的问题无关,但使用下拉菜单的 onChange 方法提交表单经常会导致无意识且烦人的表单提交。

标签: coldfusion


【解决方案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>

【讨论】:

  • 当然生产代码不应该使用SELECT *,而应该使用&lt;cfqueryparam&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-13
  • 2015-03-22
  • 2021-11-29
相关资源
最近更新 更多