我有一个简单的表格。 值是从数据库加载到一个数组,然后使用cfinput和cfselect标签来使字段编辑显示的整个表。 所以,我希望能够改变任何领域的向上和向下显示,然后点击提交,并显示改变字段,但没有什么是永远改变了表。 该表只是恢复到原来的和更改标签dissappear。 我不想让用户使用seperately一个单独的形式更新每个字段。 我想有整个页面更新在一次提交。
有什么建议么:
<!--- **** 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>
当我想要做你正在尝试什么,我组织它是这样的。
第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.
还有其他一些细节,如确认提交的数据,但这应该让你开始。
你不必查询复制到一个数组中? 只要使用
<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”。
华莱士 - 确定我明白你正在尝试做的,但你需要一些东西。 首先,你需要一些JavaScript(可能)来跟踪更改。 其次,你需要“名”的形式与一些独特的元素。 您提交的表单中包含“assignment_#schoolid#”的名字。
这就是你想与你的#currentrow#变量做 - 而是因为它是从数据库中断开,并最终会搞砸了你的数据这是站不住脚的。 您的示例很可能将需要报废和重新开始。 此链接可能的帮助。
http://www.coldfusionmuse.com/index.cfm/2011/1/5/form.loop.update.dataset
......而这就是为什么我用数组,因为我料想他会要求和更新(SQL更新)的每一行的数据是不同的/独特。 我希望通过使用cfselect等数组击败系统..使这一切在发生一次,然后把数组中的更改回数据库
它不工作的方式。 在CF阵列重建每次页面加载,并请求之间不存在。 它们只存在,而你正在生成<form>
一旦<form>
被发送回客户端/浏览器,要从服务器断开连接和阵列都消失了。 要访问用户输入新的价值观,你必须处理提交的表单字段(不是数组)。
在你的情况,你应该使用唯一的字段名。 所以,你可以跟踪每个“行”或领域的“设置”。 要做到这一点的方法之一是一个计数器变量追加到字段名。 行存放在一个隐藏字段数(主查询循环外)。
<form name="formData" method="post" action="debug.cfm">
<cfoutput query="getAssignments">
row = #currentRow#
Assignment
<input type="text" name="UniqueRecordID_#currentRow#" value="#getAssignments.UniqueRecordID#">
<input type="text" name="Assignment_#currentRow#" value="#getAssignments.Assignment#">
<!--- note: this field should have a more descriptive name --->
<select name="Name_#currentRow#">
<option value="">Not Assigned</option>
<cfloop query="getNames">
<option value="#TheValueCol#" <cfif getNames.TheValueCol eq getAssignments.Baylor>selected="true"</cfif>>
#TheDisplayCol#
</option>
</cfloop>
</select>
<br>
</cfoutput>
<!--- store total number of rows --->
<cfoutput>
<input type="hidden" name="totalRows" value="#getAssignments.recordCount#">
</cfoutput>
<input type="submit" name="submit" value="Update">
</form>
提交表单后,使用form.totalRows循环,并提取值。 在循环中,做任何你需要的价值观做(存储在数据库中,显示器,等...)
<cfif structKeyExists(FORM, "submit")>
<cfparam name="form.totalRows" default="0">
<cfloop from="1" to="#form.totalRows#" index="variables.row">
<!--- get each set of values --->
<cfset variables.ID = FORM["UniqueRecordID_"& variables.row]>
<cfset variables.assignment = FORM["assignment_"& variables.row]>
<cfset variables.name = FORM["Name_"& variables.row]>
<!--- display changed values (insert them into a db, etc..) --->
<cfoutput>
row [#variables.row#]
id = #variables.id#
assignment = #variables.assignment#
name = #variables.name#<br>
</cfoutput>
</cfloop>
</cfif>