1

编辑:这是对上一个问题的跟进)

我正在对一个网站进行彻底的重新设计,该网站允许用户为多个用户签出多台机器。

这是我到目前为止所拥有的。

输出两个 cfqueries 的首页。

一个查询是活动机器(即,已经签出)。它是一个基本的cfoutput 查询,并根据查询的值显示信息。我使用 cfif 语句仅过滤活动机器(如果在 SQL 中活动,则值 = 1)

它还输出 MAC、IP OS 等内容。

另一个查询是用户可以签出的非活动机器。它还根据是否处于活动状态进行过滤,这次通过 cfif query.active eq 0 进行过滤。此查询有几个表单字段,以便用户可以选中要签入的设备的复选框,在要求字段中输入(userID和评论,基本上)并提交。

此页面底部有一个下拉菜单,可让您选择操作,表单传入一个操作编号 (form.choose_action),告诉 cfc 它应该做什么。IE 如果操作编号为 4,则告诉 cfc 将人员发送到编辑页面并将设备 ID 连同它一起传递。

所以基本上我在每种情况下都传递了 DeviceID,只有当机器处于活动状态时才传递 UserID。

当用户单击提交时,它会直接进入一个调用 cfc 的页面,该页面完成了大部分繁重的工作。

总而言之,这是一个极差的解决方案,因为它只有在一次签入或签出一台机器时才真正有效。

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

例子

这就是我想要的:

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

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

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

一些注意事项:一次只有一个用户会使用它,所以我不必担心会话内容或有很多人尝试签入同一设备。

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

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

感谢您的时间。

4

2 回答 2

2

由于设备可能分配给不同的用户,您需要一个命名约定,允许您将每个设备ID 与其相关字段(即用户ID、评论等)相关联。一种选择是将“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生成的字段名称将如下所示。请注意,每组字段共享相同的设备 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 来获取关联的用户 ID 和评论值。一旦你有了这些值,就可以使用该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>
于 2012-12-05T20:08:45.850 回答
1

问:目前我唯一能想到的就是通过数组传递设备值。但不确定我是否可以在复选框中执行此操作。

答:当检查多个复选框时,ColdFusion将它们视为值列表。所以你会得到类似的东西

checkedout=4312,5231,51

如果三个复选框被选中

checkedin=31,9876

如果检查了两个项目。

于 2012-12-05T19:21:53.593 回答