我正在使用CF8和MySQL 5.
我有一个包含多个日期字段的表单(每天一个,表单上可能有10天以上的数据),用户可以选择不同的日期,并且它们在循环中都有不同的var名称。
这些日期字段的默认值在数据库中为空。我可以在MySQL中的DATE列中插入日期而没有任何问题,并且已经验证数据是否正确插入(也使用cfqueryparam DATE)。
我将表单日期字段的“值”设置为变量名称,但无法显示该值。
每次输入数据库时日期都会更新为数据库,但是当表单回复给自己时,日期字段为空(其他非日期字段工作正常,更改显示)。
然后,当我使用空白日期字段提交它时,在DB(表单中的空字符串)中将值设置回null,因为表单字段不会从DB中提取值。
字段名称(ses #i #Date)在我转储时以正确的值显示正确的形式(ses1Date,ses2Date等等)。
<cfloop from="1" to="#form.days#" index="i"> <cfinput type="datefield" name="ses#i#Date" value="#DateFormat(qGetUWHeader["ses#i#Date"],"yyyy-mm-dd")#" /> ....
感谢您的时间和帮助。
答案 0 :(得分:1)
要引用动态列名称,可以使用数组表示法。但正如我所提到的,你必须提供一个行号。
#queryName["columnName"][rowNumber]#
如果您知道查询只包含一(1)条记录,则可以使用查询对象的“recordCount”属性作为行号。或者,您可以对行号“1”进行硬编码。 (就个人而言,我不喜欢硬编码)。但是其中任何一个都应该有效。
<!--- pick ONE option --->
<cfloop from="1" to="#form.days#" index="i">
<!--- syntax option 1 --->
<cfinput type="datefield" name="ses#i#Date" value="#DateFormat(qGetUWHeader['ses#i#Date'][qGetUWHeader.recordCount], 'yyyy-mm-dd')#" />
<!--- syntax option 2 --->
<cfinput type="datefield" name="ses#i#Date" value="#DateFormat(qGetUWHeader['ses'& i &'Date'][qGetUWHeader.recordCount],'yyyy-mm-dd')#" />
<!--- syntax option 3 --->
<cfinput type="datefield" name="ses#i#Date" value="#DateFormat(qGetUWHeader['ses#i#Date'][1], 'yyyy-mm-dd')#" />
</cfloop>
但是,如果您在qGetUWHeader查询中循环遍历多条记录,则可以使用查询对象的“currentRow”属性作为行号。但根据字段命名约定,我猜测查询只包含一(1)条记录。
修改强> 我忘记了初始的空值。您可以应用简单的if条件,并且只有在查询值是有效日期时才调用DateFormat()。
<cfloop from="1" to="#form.days#" index="i">
<cfset dateValue = qGetUWHeader["ses#i#Date"][qGetUWHeader.recordCount]>
<!--- if this is a valid date, format the value --->
<cfif IsDate(dateValue)>
<cfset dateValue = dateFormat(dateValue, "yyyy-mm-dd")>
</cfif>
<cfinput type="datefield" name="ses#i#Date" value="#dateValue#" /><hr>
</cfloop>
另一种选择是格式化SQL中的日期。然后你不需要使用CF的DateFormat()函数。请注意,新结果将是一个字符串,不是一个日期时间对象。
SELECT DATE_FORMAT(ses1Date, '%Y-%m-%d') AS ses1Date, ....
答案 1 :(得分:1)
“qGetUWHeader”定义在哪里?
发布表单时,所有值都将发布到表单范围。因此,为了显示回发值,您应该引用表单作用域,除非您将值复制到'qGetUWHeader'中。即使表单中的正确日期存储在表单范围中,您也会在回发时显示qGetUWHeader的默认值,除非您在那里做了我不知道的事情。然后,下次发布表单时,默认值将覆盖先前输入的值。
<!--- In order to reference FORM values, you must CFPARAM them first to define the default value. --->
<cfparam name="form.days" default="10">
<cfloop from="1" to="#form.days#" index="i">
<cfparam name="form['ses#i#Date']" default="">
</cfloop>
<!--- Display the Form --->
<cfform action="#cgi.SCRIPT_NAME#" method="post">
<cfloop from="1" to="#form.days#" index="i">
<cfset thisFieldName = "ses" & i & "Date">
<cfset thisFieldValue = form["ses#i#Date"]>
<cfoutput>#thisFieldName#</cfoutput> <!--- For Debugging --->
<cfinput type="datefield" name="#thisFieldName#" value="#thisFieldValue#" /><br /><br />
</cfloop>
<input type="submit" name="submit" value="submit" />
</cfform>
<!--- Debug --->
<cfdump var="#form#">