(修改:这是previous question的后续行动)
我正在努力完全重新设计一个网站,允许用户为多个用户签出多台计算机。
这是我到目前为止所拥有的。
输出两个cfqueries的首页。
一个查询是活动计算机(即已经检出)这是一个基本的cfoutput查询,并根据查询的值显示信息。我使用cfif语句只过滤活动的机器(如果在SQL中激活,则值= 1)
它还输出MAC,IP OS等内容。
另一个查询是用户可以签出的非活动计算机。它也会根据它是否处于活动状态进行过滤,这次是通过cfif query.active eq 0.此查询有一些表单字段,以便用户可以选中要检入的设备的复选框,输入require字段(userID)和评论,基本上)并提交。
此页面底部有一个下拉菜单,允许您选择操作,表单传入一个操作号(form.choose_action),告诉cfc它应该做什么。 IE,如果动作号为4,则告诉cfc将此人发送到编辑页面并随之传递deviceID。
所以基本上我在每种情况下传递DeviceID,只有在机器处于活动状态时传递UserID。
当用户点击提交时,它会直接进入一个调用cfc的页面,该cfc执行大部分繁重工作。
总而言之,这是一个非常糟糕的解决方案,因为它只有在一台机器一次检入或退出时才能正常工作。
这是一张图片,可以更好地解释发生了什么。
这就是我想要的:
可以选择多个设备并进行检入/检出,希望以某种方式使用复选框。
如果为用户检查机器,则必须以某种方式将UserID连接到条目表单中的相应设备(非活动输出查询),并且如果可能,应与设备ID一起输入单个插入中。
我希望能够检入多个设备,但也阻止人们检查活动的机器(因为它们已经检出)。对于不活动的机器也是如此,我想阻止用户检查尚未检出的机器。截至目前,我只是使用数字(即如果字段大于0)
一些注意事项:一次只有一个用户会使用此功能,所以我不必担心会话内容或者有很多人试图检查同一设备。
目前我将变量推送到页面然后将表单数据传递到CFC,这可能不是最好的方法。
我遇到的最大问题是从设计的角度来看,我的逻辑非常复杂且效率低下。目前,我唯一能想到的是通过数组传递设备值。但不确定我是否可以在复选框中执行此操作。
感谢您的时间。
答案 0 :(得分:2)
由于设备可能被分配给不同的用户,因此您需要一个命名约定,允许您将每个deviceID与其相关字段(即userID,注释等)相关联。一种选择是将“deviceID”作为后缀添加到每组字段中:
<cfoutput query="yourQuery">
Device ID <input type="checkbox" name="deviceID" value="#deviceID#">
UserID:<input type="text" name="userID_#deviceID#" ...>
Comment:<input type="text" name="comment_#deviceID#" ...>
</cfoutput>
假设您的查询包含三个设备ID,即35,48,52
,结果字段名称将如下所示。请注意,每个 set 字段共享相同的设备ID。
<input type="checkbox" name="deviceID" value="35">
<input type="text" name="userID_35" ...>
<input type="text" name="comment_35" ...>
<input type="checkbox" name="deviceID" value="48">
<input type="text" name="userID_48" ...>
<input type="text" name="comment_48" ...>
<input type="checkbox" name="deviceID" value="52">
<input type="text" name="userID_52" ...>
<input type="text" name="comment_52" ...>
然后,在提交表单时,form.deviceID
将包含已检查设备的逗号分隔列表。您可以遍历该列表并使用当前ID来获取关联的userID和注释值。获得这些值后,使用action
类型运行INSERT,UPDATE或任何您需要执行的操作。
请注意,由于每个设备可能被分配给不同的用户,因此您无法在单个语句中执行INSERT
<cfparam value="form.deviceID" default="">
<!--- for each device id .. --->
<cfloop list="#form.deviceID#" index="currDeviceID">
<!--- grab the associated user and comment --->
<cfset userID = FORM["userID_"& currDeviceID]>
<cfset comment = FORM["comment_"& currDeviceID]>
... validate ...
<cfquery ...>
run your query
</cfquery>
</cfloop>
答案 1 :(得分:1)
问:目前,我唯一能想到的是通过数组传递设备值。但不确定我是否可以在复选框中执行此操作。
答:当检查多个复选框时,ColdFusion会将它们视为值列表。所以你会得到像
这样的东西checkedout=4312,5231,51
如果选中了三个复选框
checkedin=31,9876
如果检查了两件物品。