我正在尝试在 ColdFusion 中创建一个值列表。基本上,我希望用户能够将他们的乐队成员输入到各个字段中。然后在提交时,任何存在的值都作为字符串而不是单个文本值存储到我的数据库中。从数据库中检索它时,运行它并使用逗号作为分隔符并再次单独拆分值。在纸上和我的脑海中,这听起来很简单,但我无法理解它。任何帮助,将不胜感激 :)
2 回答
如果您真的想使用该解决方案,您可以简单地使用listToArray
+cfloop
或只是cfloop
获取个人名称:
<CFSET list_names = "John ,Luke, Bob" /> <!--- this should be the value from your db field --->
<CFSET array_names = listtoarray(list_names) />
<CFLOOP array="#array_names#" index="name">
#name# is in the band<br />
</CFLOOP>
或者直接使用列表并循环它:
<CFSET list_names = "John ,Luke, Bob" /> <!--- this should be the value from your db field --->
<CFLOOP list="#list_names#" index="name">
#name# is in the band<br />
</CFLOOP>
但是......我会将乐队成员的姓名保存在单独的表格中 - 例如:
表bands
:
| id | bandname |
+----+-----------+
| 1 | The Hives |
表bands_members
:
| band_id | name |
+---------+------------------------+
| 1 | Howlin’ Pelle Almqvist |
| 1 | Nicholaus Arson |
| 1 | Vigilante Carlstroem |
为兜售我自己的(免费和开源)产品而道歉,DataMgr 有一些东西可能对这种情况特别有吸引力。
您可以传入一个逗号分隔的列表,它会将列表适当地保存为相关表中的行。
所以,你可以有一个“bands”表,一个“players”表,一个连接它们的“band2players”表。如果是这样,您可以有一个可用玩家复选框(称为“玩家”)。
然后,当您提交乐队时,您可以在 Form.id 中启动一个 band_id(例如)并执行以下操作:
<cfset Application.DataMgr.SaveRelationList("band2players","band_id",Form.id,"player_id",Form.players)>
http://www.bryantwebconsulting.com/docs/datamgr/save-many-to-many-relationships.cfm
通过一些额外的工作,您甚至可以在 DataMgr 中设置一个“关系字段”,以使 DataMgr 的行为就像“bands”表有一个“players”字段一样,即使它实际上只是在后台访问“bands2players”数据. 这将允许您使用逗号分隔的列表进行保存和检索。如果您想要一个文本区域而不是复选框列表,您甚至可以使用名称而不是 id。