1

編集:これは前の質問へのフォローアップです)

私は、ユーザーが複数のユーザーのために複数のマシンをチェックアウトできるサイトの完全な再設計に取り組んでいます。

これが私がこれまでに持っているものです。

2 つの cfquery を出力するフロント ページ。

1 つのクエリは、アクティブなマシン (つまり、チェックアウト済み) です。これは基本的な cfoutput クエリであり、クエリの値に基づいて情報を表示します。cfif ステートメントを使用して、アクティブなマシンのみをフィルタリングします (SQL でアクティブな場合は値 = 1)。

また、MAC、IP OS なども出力します。

もう 1 つのクエリは、ユーザーがチェックアウトできる非アクティブなマシンです。また、アクティブであるかどうかに基づいてフィルタリングされますが、今回は cfif query.active eq 0 によって行われます。このクエリにはいくつかのフォーム フィールドがあり、ユーザーはチェックインするデバイスのチェック ボックスをオンにして、必須フィールド (userID) に入力できます。とコメント、基本的に)そしてそれを提出してください。

このページの下部に、アクションを選択できるドロップダウン メニューがあり、フォームはアクション番号 (form.choose_action) を渡して、cfc に何をすべきかを伝えます。IE のアクション番号が 4 の場合、cfc に人を編集ページに送信するように指示し、deviceID を一緒に渡します。

したがって、基本的にはあらゆる状況で DeviceID を渡し、マシンがアクティブな場合にのみ UserID を渡します。

ユーザーが送信をクリックすると、面倒な作業のほとんどを行う cfc を呼び出すページに直接移動します。

全体として、これは非常に貧弱なソリューションです。一度に 1 台のマシンがチェックインまたはチェックアウトされている場合にのみうまく機能するからです。

何が起こっているのかをよりよく説明するための写真を次に示します。

例

これが私が望むものです:

複数のデバイスを選択してチェックイン/チェックアウトできます。うまくいけば、何らかの方法でチェックボックスを使用できます。

ユーザーのためにマシンをチェックアウトする場合、UserID は何らかの方法でエントリ フォーム (非アクティブな出力クエリ) のそれぞれのデバイスに関連付ける必要があり、可能であれば、単一の挿入で deviceID と一緒に入力する必要があります。

複数のデバイスをチェックインできるようにしたいだけでなく、アクティブなマシンをチェックアウトできないようにしたい (マシンは既にチェックアウトされているため)。非アクティブなマシンにも同じことが言えます。ユーザーがまだチェックアウトしていないマシンをチェックインできないようにしたいと思います。今のところ、私は数字を使用しています(つまり、フィールドが 0 より大きい場合)

いくつかのメモ: 一度にこれを使用するのは 1 人のユーザーだけなので、セッションのことや、同じデバイスに多くの人がチェックインしようとすることについて心配する必要はありません。

現在、フォーム データを CFC に渡すページに変数をプッシュしていますが、これは最善の方法ではない可能性があります。

本当に私が抱えている大きな問題は、設計の観点からです。私のロジックは非常に複雑で非効率的です。現時点で私が考えることができる唯一のことは、配列を介してデバイスの値を渡すことです。しかし、チェックボックスでこれを行うことができるかどうかはわかりません。

お時間をいただきありがとうございます。

4

2 に答える 2

2

デバイスは異なるユーザーに割り当てられる可能性があるため、各デバイス ID をその関連フィールド (ユーザー ID、コメントなど) に関連付けることができる命名規則が必要です。1 つのオプションは、「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>

クエリに 3 つのデバイス 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 を使用して、関連する 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>
于 2012-12-05T20:08:45.850 に答える
1

Q:現時点では、デバイスの値を配列で渡すことしか考えられません。しかし、チェックボックスでこれを行うことができるかどうかはわかりません。

A:複数のチェックボックスがオンになっている場合、ColdFusion はそれらを値のリストとして認識します。だからあなたは次のようなものを得るでしょう

checkedout=4312,5231,51

3 つのチェック ボックスがオンになっている場合

checkedin=31,9876

2つの項目がチェックされた場合。

于 2012-12-05T19:21:53.593 に答える