设计建议:多用户多设备提交站点

时间:2012-12-05 17:49:22

标签: coldfusion

修改:这是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执行大部分繁重工作。

总而言之,这是一个非常糟糕的解决方案,因为它只有在一台机器一次检入或退出时才能正常工作。

这是一张图片,可以更好地解释发生了什么。

example

这就是我想要的:

可以选择多个设备并进行检入/检出,希望以某种方式使用复选框。

如果为用户检查机器,则必须以某种方式将UserID连接到条目表单中的相应设备(非活动输出查询),并且如果可能,应与设备ID一起输入单个插入中。

我希望能够检入多个设备,但也阻止人们检查活动的机器(因为它们已经检出)。对于不活动的机器也是如此,我想阻止用户检查尚未检出的机器。截至目前,我只是使用数字(即如果字段大于0)

一些注意事项:一次只有一个用户会使用此功能,所以我不必担心会话内容或者有很多人试图检查同一设备。

目前我将变量推送到页面然后将表单数据传递到CFC,这可能不是最好的方法。

我遇到的最大问题是从设计的角度来看,我的逻辑非常复杂且效率低下。目前,我唯一能想到的是通过数组传递设备值。但不确定我是否可以在复选框中执行此操作。

感谢您的时间。

2 个答案:

答案 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

如果检查了两件物品。