我正在尝试在ColdFusion中创建一个值列表。基本上,我希望用户能够将他们的乐队成员输入到各个领域。然后,在提交时,任何存在的值都将作为字符串而不是单个文本值存储到我的数据库中。从数据库中检索它时,运行它并使用逗号作为分隔符并再次单独拆分值。在纸上和我脑海里听起来很简单,但我无法理解它。任何帮助将不胜感激:)
答案 0 :(得分:5)
如果您真的想使用该解决方案,只需使用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 |
答案 1 :(得分:0)
对于宣传我自己的(免费和开源)商品道歉,DataMgr可能对这种情况特别有吸引力。
您可以传入以逗号分隔的列表,它会将列表正确保存为相关表格中的行。
所以,你可以有一个“乐队”表,一个“玩家”表,一个加入他们的“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像“band”表一样具有“播放器”字段,即使它实际上只是访问“bands2players”数据在后台。这将允许您使用逗号分隔列表进行保存和检索。如果你想要一个textarea而不是一个复选框列表,你甚至可以使用名称而不是id。