отображение поля даты в значении формы поля даты - PullRequest
0 голосов
/ 21 сентября 2009

Я использую CF8 и MySQL 5.

У меня есть форма с несколькими полями дат (по одному на каждый день, и форма может содержать более 10 дней данных), для которых пользователь может выбирать разные даты, и у них всех разные имена переменных в цикле.

Значения по умолчанию для этих полей даты равны нулю в БД. Я могу вставить дату в столбец DATE в MySQL без проблем и проверил, что данные вставлены правильно (также с помощью cfqueryparam DATE).

У меня есть 'значение' поля даты формы, установленное на имя переменной, и я не могу получить значение для отображения.

Дата обновляется в БД точно каждый раз, когда она вводится, но когда форма отправляет обратно себе, поля даты остаются пустыми (другие поля без даты работают нормально, и изменения отображаются).

Затем, когда я отправляю его с пустыми полями даты, значение в БД возвращается к нулю (пустая строка в форме), поскольку поле формы не извлекает значение из БД.

Имя поля (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 ]

1 голос
/ 22 сентября 2009

Где определяется «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#">
1 голос
/ 22 сентября 2009

Для ссылки на динамические имена столбцов вы можете использовать обозначение массива. Но, как я уже говорил, вы должны указать номер строки.

 #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) запись.

EDIT: Я забыл про начальные нули. Вы можете применить простое условие 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. Тогда вам не нужно будет использовать функцию DateFormat () CF. Просто помните, что новым результатом будет строка, , а не объект datetime.

SELECT DATE_FORMAT(ses1Date, '%Y-%m-%d') AS ses1Date, ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...