在日期字段表单的值中显示日期字段

时间:2009-09-20 21:27:55

标签: datetime coldfusion

我正在使用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")#" /> ....

感谢您的时间和帮助。

2 个答案:

答案 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#">