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

Coldfusion 设计建议:多用户多设备提交站点,coldfusion,Coldfusion,(编辑:这是对 我正在重新设计一个网站,允许用户为多个用户检查多台机器 这是我到目前为止所拥有的 输出两个查询的首页 一个查询是活动机器(即,已签出)。这是一个基本的cfoutput查询,根据查询值显示信息。我使用cfif语句仅过滤活动机器(如果在SQL中活动,则值=1) 它还输出MAC、IP操作系统等内容 另一个查询是用户可以签出的非活动机器。它还根据是否处于活动状态进行过滤,这次是通过cfif query.active eq 0进行过滤。此查询有几个表单字段,以便用户可以选中要签入的设备的复

编辑:这是对

我正在重新设计一个网站,允许用户为多个用户检查多台机器

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

输出两个查询的首页

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

它还输出MAC、IP操作系统等内容

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

此页面底部有一个下拉菜单,允许您选择操作,表单会传入一个操作编号(form.choose\u action),告诉cfc它应该做什么。即,如果操作编号为4,则通知cfc将此人发送到编辑页面,并将deviceID与之一起传递

因此,基本上,我在任何情况下都会传入DeviceID,并且只有在机器处于活动状态时才会传入用户ID

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

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

这里有一张图片可以更好地解释发生了什么

以下是我想要的:

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

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

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

一些注意事项:一次只有一个用户会使用它,所以我不必担心会话内容或有很多人试图在同一台设备上进行检查

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

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


谢谢你抽出时间

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

A:选中多个复选框时,ColdFusion将它们视为一个值列表。所以你会得到这样的结果

checkedout=4312,5231,51
如果选中了三个复选框

checkedin=31,9876

如果选中了两项。

由于设备可能被分配给不同的用户,您需要一个命名约定,允许您将每个设备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>
然后,在提交表单时,
form.deviceID
将包含一个以逗号分隔的已检查设备列表。您可以循环浏览该列表,并使用当前ID获取关联的用户ID和注释值。获得这些值后,使用
操作
类型运行插入、更新或任何需要执行的操作

请注意,由于每个设备可能被分配给不同的用户,因此不能在单个语句中进行插入


... 验证
运行您的查询

Ah我明白了,所以你可以用一个循环分割列表,并将每个变量赋给一个值?我想问题是,这一切都会使sql插入失效,而只有在插入中指定了一个变量时,sql插入才能真正起作用。SELECT可以使用
插入必须循环,我认为对于您和您的用户来说,使用两个页面会简单得多,一个用于签入,一个用于签出。有多少个设备?这个方法工作得很好,而且它也适合于友好的javascript。例如,如果您在该行中有触发事件的内容,它可能看起来像这样(如果您没有使用像jQuery这样的库)
onClick=“javascript:dosomethingtothistrow(#yourQuery.deviceID#);
那么您的函数可能看起来像
函数dosomethingthistrow(device){getElementById(“userID”+device)}
 <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" ...>
  <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>