1

私はシンプルなフォームを持っています。値はデータベースから配列にロードされ、フィールド編集を可能にする cfinput タグと cfselect タグを使用してテーブル全体が表示されます。そのため、表示されているテーブルの上下にフィールドを変更し、[送信] をクリックして変更されたフィールドを表示できるようにしたいと思っていましたが、何も変更されていません。テーブルが元の状態に戻るだけで、タグへの変更が消えます。ユーザーに個別のフォームを使用して各フィールドを個別に更新させたくありません。1 回の送信でページ全体を更新したいと考えています。

助言がありますか:

<!--- **** LOAD ARRAY FROM DATABASE  ********************************** --->

    <cfset AssignArray = ArrayNew(2)>

    <cfset i=1>
    <cfoutput query="getAssignments">
        <cfset AssignArray[i][1]="#getAssignments.Assignment#">
        <cfset AssignArray[i][2]="#getAssignments.Baylor#">
        <cfset i = i + 1>
    </cfoutput>

<!--- **** FORM WITH TABLE OF VALUES TO CHANGE  ********************************** --->

    <table border="0" cellspacing="0">
        <caption>Update Assignments</caption>

    <cfform name="formData">
    <table>
      <tr><th>#</th><th>Assignment</th><th>Name</th></tr>
      <cfloop from="1" to= "#getAssignments.RecordCount#" index="i">
         <tr>
            <td class="centercell"><cfoutput>#i#</cfoutput></td>
            <td><cfinput class="assignSize" type="text" name="Assignment"
                    maxlength="70" 
                   value="#AssignArray[i][1]#"></td>
            <td><cfselect class="assignFont" name="Name" query="getNames" 
                    display="Name" value="Baylor" selected="#TRIM(AssignArray[i][2])#">
                     <cfif AssignArray[i][2] neq "">
                         <option value="">Not Assigned</option>
                     <cfelse>
                         <option value="" selected="selected" >Not Assigned</option>
                     </cfif>
                 </cfselect>
            </td>
        </tr>
      </cfloop>
    </table>    

      <cfinput class="btnStyle" type="submit" name="submit" value="Update">
    </cfform>

    <!--- ****DUMP FORM WITH CHANGED VALUES  ************************************ --->

    <cfif IsDefined ("form.Assignment")>
        <cfif IsDefined ("form.submit")>

          <table>
          <tr><th>#</th><th>Assignment</th><th>Name</th></tr>
          <cfloop from="1" to= "#getAssignments.RecordCount#" index="i">
             <tr>
                 <td class="centercell"><cfoutput>#i#</cfoutput></td>
                 <td><cfoutput>#AssignArray[i][1]#</cfoutput></td>
                 <td><cfoutput>#AssignArray[i][2]#</cfoutput></td>
              </tr>
          </cfloop>
          </table>    
        </cfif>
    </cfif>
4

3 に答える 3

0

クエリを配列にコピーする必要はありませんか? 使うだけ

<cfloop query="getAssignments">

or 

<cfoutput query="getAssignments">

次に、直接比較する<cfif len(trim(getAssignments.assignment)) GT 0>か、意味をなすために必要なことは何でもできます。

<CFFORM>...また、私たち CF 関係者のほとんどが一般的かつ普遍的に軽蔑している使用も避けたいと思います。フォームはうまく機能します。追加の特殊効果が必要な場合は、jquery を使用します。

上記の場合、選択されているものを確認したい場合は、フォーム スコープに配置されます。言い換えると

<cfif structKeyExists(form, 'assignment')>

<cfoutput>
#form.assignsize#
#form.name# 
</cfoutput>

</cfif>

選択ボックスの名前は「名前」で、紛らわしいです。「schoolName」のように簡単に取得できる名前を付けてください。


Wallace - わかりました、あなたがやろうとしていることは理解できますが、いくつかのことが必要です。最初に、変更を追跡するための JavaScript (おそらく) が必要です。次に、フォーム要素に一意の名前を付ける必要があります。「assignment_#schoolid#」のような名前のフォームを送信します。

#currentrow# 変数でやろうとしていることですが、DB から切断されており、最終的にデータが台無しになるため、これは耐えられません。あなたの例はおそらく破棄して最初からやり直す必要があるでしょう。このリンクが役立つ場合があります。

http://www.coldfusionmuse.com/index.cfm/2011/1/5/form.loop.update.dataset

于 2013-08-29T18:56:43.297 に答える
0

あなたがしようとしていることを私がやりたいとき、私はそれをこのように整理します。

ステップ 1 - クエリを実行します。必ずレコード識別子を選択してください。

<cfquery name="MyQuery">
select id, field1, field2, etc
</cfquery>

ステップ 2 - フォームを作成します。id フィールドを使用して、何が何であるかを追跡します。

<cfform>
<cfoutput query="MyQuery">
<input type="hidden" name="ExistingField1#id#" Value="#Field1#">
<input name = Field1#id# Value="#Field1#>
etc
</cfform>

ここで、フォームが送信されたと仮定しましょう。変更を探し、見つかった場合は更新します。

<cfloop list="#form.fieldnames#" index = "ThisField">
<cfif left(ThisField, 6) is "Field1">
<!--- The next line will get the record identifier --->
<cfset ThisId = Right(ThisField, Len(ThisField) - 6)>
<cfif form["Field1#ThisId#"] is not form["ExistingField1#ThisId#"]
or form["Field2#ThisId#"] is not form["ExistingField2#ThisId#"]
etc>
update query goes here
three closing tags go here.

送信された値の検証など、他にも詳細がいくつかありますが、これで作業を開始できます。

于 2013-08-30T00:11:37.943 に答える