【问题标题】:Creating a structure as a button in ColdFusion在 ColdFusion 中将结构创建为按钮
【发布时间】:2018-08-02 17:28:17
【问题描述】:

首先,我不确定如何为这个问题命名,所以如果它含糊不清,我深表歉意。我正在尝试使用 ColdFusion 创建购物清单,但遇到了一些障碍。我希望在已创建的项目旁边出现一个删除按钮。我几乎所有东西都在工作,但是我对 ColdFusion 中的结构了解不够,无法理解我做错了什么。它类似于 React.js 中的组件吗?我遇到了一个问题,说变量“按钮”没有定义。我假设这是因为 structkeyExists 无法识别单个按钮。为什么这适用于表单而不适用于按钮?

这是我的代码:

<cfif structKeyExists(form, "submitButt")>
  <cfquery datasource="ESC-ADD-TECH">
     INSERT INTO Main(itemDesc) VALUES('#itemDesc#')
  </cfquery>
</cfif>

<cfif structKeyExists(button, "delete_butt")>
  <cfquery datasource="ESC-ADD-TECH">
    INSERT INTO Main(itemDesc) VALUES('#itemDesc#')
  </cfquery>
</cfif>


<cfquery datasource="ESC-ADD-TECH" name="items">
        DELETE FROM Main
        WHERE itemDesc = '#itemDesc#'
</cfquery>

<body>
    <div id="myDIV" class="header">
        <h2>My Shopping List</h2>
        <form method="POST">
        <input type="text" name="itemDesc" placeholder="Title...">
        <input name="submitButt" type="submit" class="addBtn">
        </form>
    </div>

    <cfoutput query="items">
     <li>#items.itemDesc#  <button class="delete" name="delete_butt">x</button></li>
    </cfoutput>

</body>

有没有办法使用结构来做我想做的事情?我最好在javascript中创建按钮并尝试将结构创建为布尔语句并让javascript重写该值吗?有点只是在黑暗中拍摄,但我将不胜感激。

谢谢大家!

【问题讨论】:

  • 我想知道我是否可以用表单标签包装按钮
  • 您应该使用cfqueryparam 而不是将变量转储到cfquery 块中。这为您打开了 SQL 注入的大门,尤其是在这些变量没有作用域的情况下。 ColdFusion 有一个记录在案的scope precedence(搜索使用范围
  • @Rain 1) 超级嫉妒你有一个非常棒的用户名。 Rain是有史以来最好的用户名。 2) 非常感谢您提供的信息。这只是为了测试而不是其他任何东西,但我很感激这个建议。我会把它作为我笔记的一部分。再次感谢!
  • 谢谢,这是我的真名。 cfdump 或等效的 cfscript writedump 在学习 ColdFusion 时非常宝贵。在开发时,将一切转储到筛选和检查它。在这种情况下,您可以&lt;cfdump var="#form#"/&gt; 看看发生了什么。 ColdFusion 是一种不一致的语言,具有稀疏的文档和奇怪的 规则。不要相信它,看看它在做什么。 :)
  • 同意cfqueryparam。 “好代码”从不在查询中使用原始客户端值。

标签: coldfusion structure


【解决方案1】:

因此,提交的表单中不会有“按钮”结构。 首先要记住的是,ColdFusion 结构只是键/值对的集合(类似于 JavaScript 对象),除非设置了值,否则将是未定义的。

在您的情况下,存在“表单”结构是因为您使用input[type="submit"] 将页面提交回自身。对于 ColdFusion 页面,它将为提交的表单中的每个命名输入创建一个带有键的表单结构,其值是从这些元素的值属性中提取的。

如果您尝试使用表单结构来处理删除项目,最好使用单选按钮/复选框来选择要删除的项目,并使用提交的 value 属性设置要采取的操作按钮。

以您的代码为例:

<cfparam name="form.action" type="string" default="none">
<cfswitch expression="#form.action#">
    <cfcase value="insert">
        <!---Your insert query goes here--->
    </cfcase>
    <cfcase value="delete">
        <!---Your delete query goes here--->
    </cfcase>
    <cfdefaultcase></cfdefaultcase>
</cfswitch>

<!---Your select query--->

<body>
    <form method="post" action="#">
        <div id="myDIV" class="header">
            <h2>My Shopping List</h2>
            <input type="text" name="itemDesc" placeholder="Title...">
            <button type="submit" name="action" value="insert">Submit</button>
        </div>
        <ul>
            <cfoutput query="items">
                <li>#items.itemDesc#  
                    <input type="radio" name="delDesc" value="#items.itemDesc#"/>
                </li>
            </cfoutput>
        </ul>
        <button type="submit" name="action" value="delete">Delete</button>
    </form>
</body>

在这种情况下,您将在插入值时使用form.itemDesc,在删除项目时使用form.delDesc

【讨论】:

  • 哇!很好的答案。
  • 感谢您,它提供了非常丰富的信息并且非常有帮助!您是否有任何关于 ColdFusion 的文件可以帮助我避免提出基本问题?另外,使用 switch case 语句而不是 if else 有什么真正的好处吗?纯粹出于好奇。
  • 很遗憾,没有,在 Adob​​e 的网站之外很难找到 ColdFusion 的良好文档。我对这门语言的大部分了解来自于反复试验:与其他人所说的相呼应,cfdump 对于弄清楚页面中发生了什么非常宝贵。 -edit- 至于使用 switch 与 if elseif 语句;在这种情况下,如果有的话并没有太大的区别,这实际上更多的是个人喜好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 2011-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多