【问题标题】:Using dropdown menu and referencing query results使用下拉菜单并引用查询结果
【发布时间】:2020-12-31 16:28:02
【问题描述】:

我希望这是一个简单的问题,我只是不知道如何在谷歌上找到正确的答案。

我有一个使用查询填充的下拉列表。

<cfquery name="getFruits" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT TOP 3 fruit, color, size FROM fruit_table
</cfquery>

<cfselect name="fruits" query="getFruits" display="fruit" value="fruit" selected="#form.fruit#" queryPosition="below" required="yes" >
<option value="">Select Fruit</option>
</cfselect>

当用户从下拉列表中选择“水果”以引用与他们在另一个查询中选择的“水果”相关联的“大小”和“颜色”时,是否有可能?

例如:

<cfquery name="getFruits" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT vegetable FROM vegetable_table WHERE size = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.size#"> AND color = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.color#">
</cfquery>

谢谢!

【问题讨论】:

  • 这似乎是一个简单的表单提交。但是,您的水果 cfselect 具有选定属性这一事实似乎很奇怪。是否有更早的表单提交到此水果页面?
  • @DanBracuk 如果它是一个自我发布的表格,这将是有意义的。
  • @DanBracuk 我只是复制代码。提交此表单将重新加载页面,我想显示在使用该属性之前选择的内容。
  • 您可以结合使用 ColdFusion 和 Javascript 来根据用户输入更改网页的某些部分。谷歌搜索coldfusion refresh div 将引导您找到一些代码示例。

标签: html coldfusion dropdown cfselect


【解决方案1】:

当您的表单被提交时,form.fruits 的值会在没有 colorsize 属性的情况下发布。因此,您将重新编码 &lt;cfquery&gt;(我将其重命名为“getVegetables”)以从所选水果中获取这些属性的方式是这样的。

<cfquery name="getVegetables" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
    SELECT
        vegetable 
    FROM 
        vegetable_table 
    WHERE (size, color) IN
        (SELECT
            size, color 
        FROM 
            fruit_table
        WHERE
            fruit = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.fruits#">)
</cfquery>

顺便说一句,我不喜欢使用&lt;cfselect&gt; 或任何&lt;cfform&gt; 标签,但这不是你的问题。但是,我强烈建议您放弃它并重构您的代码。

编辑(第二次尝试):

作为替代答案,如果您想传递用逗号连接的 size,color 列并从表单中传递别名为 sizeColor 而不是 fruit 列中的 &lt;cfquery&gt;,那么您可以做什么而是将第一个选择语句更改为

<cfquery name="getFruits" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT TOP 3 
fruit,
size || ',' || color AS sizeColor 
FROM fruit_table
</cfquery>

然后将&lt;cfselect&gt; 中的值属性更改为value="sizeColor",这将是前面提到的以逗号分隔的大小和颜色列表。所以代码将改为

<cfselect name="fruits" query="getFruits" display="fruit" value="sizeColor" selected="#form.fruit#" queryPosition="below" required="yes" >
<option value="">Select Fruit</option>
</cfselect>

那你可以把发布页面上的&lt;cfquery&gt;改成这个。

<cfquery name="getVegetables" datasource="#application.dsnName#" username="#application.dsnUser#" password="#application.dsnPass#">
SELECT vegetable FROM vegetable_table 
WHERE 
    size = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.fruits.listGetAt(1)#"> AND 
    color = <cfqueryparam cfsqltype="cf_sql_varchar" maxlength="50" value="#form.fruits.listGetAt(2)#">
</cfquery>

【讨论】:

  • 谢谢,这正是我的设想,但不知道如何实现。我现在正在尝试这个,但遇到了错误。当我使用逗号分隔值时,我收到错误“查询列无效或丢失...”,即使这些是 cfquery 中的两个有效列并且如果单独使用也可以正常工作。有什么建议吗?
  • 啊,这是因为我缺乏使用 &lt;cfselect&gt; 的经验,&lt;cfselect&gt; 不允许在 value 字段中使用变量名,而是 SQL 选择语句中特定列的字符串文字。您可以做的是创建一个大小、逗号、颜色连接和别名的计算列,并使用别名列,例如size || ',' || color sizeColor(假设双管道是您的连接运算符)并使用 sizeColor 作为您的 value 属性。我会修改我的答案。
  • 你是个聪明人user1203119,再次感谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 2017-02-14
  • 2018-12-06
  • 2019-07-16
相关资源
最近更新 更多