【问题标题】:How to create an array that will store form input inside a session variable using ColdFusion?如何使用 ColdFusion 创建一个将表单输入存储在会话变量中的数组?
【发布时间】:2012-04-13 23:43:24
【问题描述】:

我正在尝试在 ColdFusion 中创建一个存储在会话变量中的数组。我有一个 HTML 表单,它将输入传递给操作页面并将其存储在数组中。但是我遇到了问题,主要是在设置数组时,我尝试使用cfif来检查数组是否已定义,但没有成功。

这是 HTML 表单:

<form name="input" action="html_form_action.cfm" method="post">
id <input type="text" name="id" />
<input type="submit" value="Submit" />
</form>

这是 ColdFusion 代码:

<cfapplication name="arrays" clientmanagement="Yes"  sessionmanagement="Yes">

<cfif isDefined('form.id')>
<cfset session.urlid = form.id>


<cfset myArray = arrayNew(1)>

<cfset session.arrData[(arrayLen(session.arrData)+1)] = #session.urlid#>
</cfif>


<cfloop array=#session.arrData# index="name">
<cfoutput>
<form name="input">
item<input type="text" name="id" placeholder=#name#>

</form>
</cfoutput>
</cfloop>

我想知道如何取消设置会话,以便它从阵列中删除所有内容,我一直在阅读 ColdFusion 文档,但我不知道如何做到这一点。我已经在 PHP 中完成了这项工作,效果很好我觉得 ColdFusion 会更容易,但我认为缺乏资源使这变得困难。我将不胜感激有关如何使其正常工作的任何建议。 谢谢。

【问题讨论】:

  • 你想要完成什么?我正在绞尽脑汁想在这里找出一个用例。
  • 我正在尝试将项目添加到存储在会话中的数组中,因此每次添加新项目时都会显示数字或名称,它会显示数组中的所有项目,直到会话未设置.我正在努力使用 ColdFusion :( 谢谢!
  • 设置“myArray”后,您无法在任何地方使用它并继续操作 session.arrData。所以.. myArray 有什么意义?

标签: arrays coldfusion session-state


【解决方案1】:

这似乎是你想要做的。

<cfparam name="form.id" default="0"/>
<cfset session.urlID = form.id/>

<cfif NOT structKeyExists(session,'arrData')>
    <cfset session.arrData = arrayNew(1)/>
</cfif>

<cfset arrayAppend(session.arrData,session.urlId)/>

但它仍然有点不确定。您将 id 作为 URLID 存储在会话中,然后将其复制到 arrData 的索引(在会话中)。如果 session.urlID 中的原始值不止一个,我认为你最终会得到一个循环引用。仍然..我认为以上是您可能正在尝试的。

【讨论】:

  • 感谢您的建议!我试过并收到错误:变量 ARRAYAPEND 未定义。知道为什么吗?谢谢!
  • 上面的小sn-p 代码可以工作......如果你得到一个错误,那是因为其他地方有问题。对不起。
  • 哈哈,我一直在扫描代码中的拼写错误,也从未见过!我现在遇到另一个错误,类型为coldfusion.runtime.Struct 的对象不能用作数组,但你说代码有效,所以一定有其他错误,我会继续处理。感谢您的帮助!
【解决方案2】:

我不完全确定您的第一个问题到底是什么,但我会尽力而为!

由于您不确定 form.id 是否存在,我会查看“cfparam”标签。 这定义了 action.cfm 页面的预期参数。

<cfparam name="form.id" default="0" type="integer" />

如果你愿意的话,你可以检查 form.id GT 0 是否...?

至于在 ColdFusion 中设置数组,您就快到了…… 您创建了很棒的新数组... 但是你真的不必为每个数组值定义整数...... 只需使用:

<cfset arrayAppend(session.arrayVar,variableToAppend) />

至于“取消设置”会话变量... 大多数人只是这样做

<cfset structDelete(session,'arrData') />

我希望我没有错过任何东西... 如果您需要其他任何东西 - 请告诉我。

【讨论】:

  • 您好!非常感谢您的回复,我不知道如何使用第二行代码,我在发布的代码中替换哪一行代码?抱歉,ColdFusion 有时让我感到困惑!它是否替换了这一行:
  • 是的,它会自动将元素设置为数组中的下一个可用数字。唯一需要注意的是,您必须确保首先定义您的数组。查看 Coldfusion 文档,它们很有帮助! help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/…
  • 感谢我通读了这些文档,它们很有帮助,但对于 ColdFusion 的初学者来说有点太多了。我试图定义数组,但真的很难让它工作,我尝试使用 ArrayIsDefined。现在这是我的代码,我是否正确使用了您的建议?我现在收到错误消息:在 SESSION 中未定义元素 ARRDATA。我的代码:
  • 是的,或者“form.id”,以实际有效的为准……你做了 吗?
【解决方案3】:

您只是想将表单存储在会话范围内吗? 如果是这样,您只需要做 cfset session.formname = 表单 或使用 structcopy 函数将表单结构复制到您的会话中。

要清除它,请使用 structclear 函数。 检查它是否存在使用 cfif structkeyexists(scope, "var")

第

【讨论】:

  • 感谢您的建议,您能否提供一个此工作的示例,因为这将有助于理解它。谢谢。
猜你喜欢
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 2011-04-17
  • 1970-01-01
  • 2012-05-31
  • 2013-03-02
  • 2017-10-07
  • 1970-01-01
相关资源
最近更新 更多