2014-10-14 2 views
1

Я видел подобный пост, но не совсем то, что я пытаюсь выполнить.Coldfusion cfset date in variable

Все, что я хочу сделать, это сохранить текущую дату и время в переменной, которую я могу добавить в таблицу базы данных. Но когда форма представляет я получаю ошибку страницы по 500 SERVER

Ниже мой код до сих пор:

<cfif isDefined("FORM.submit") AND #FORM.submit# IS NOT ""> 
    <cfoutput> 
     <cfset var submit_date = #DateFormat(Now(),"mm/dd/yy - HH:mm:ss")#> 
     <cfquery name="InsertSuggestion" datasource="MainDB"> 
      INSERT INTO Suggestion_Form (Submission_Date,Submission_Content) 
      VALUES  ('#submit_date#','#FORM.suggestion_text#') 
     </cfquery> 
    </cfoutput> 
    <div style="text-align:center;width:100%;">We value your feedback. Your request has been recieved.</div> 
<cfelse> 
+0

FYI: '#' in 'AND # FORM.submit # IS NOT' не нужны. –

ответ

4

Если RDBMS есть то, что возвращает текущую дату и время, я предлагаю использовать его. В SQL Server, например, ваш запрос будет выглядеть так:

INSERT INTO Suggestion_Form 
(Submission_Date 
,Submission_Content 
) 
VALUES  
(getdate() 
, <cfqueryparam cfsqltype="cf_sql_varchar" value="#FORM.suggestion_text#"> 
) 

Если вы хотите отправить что-то из ColdFusion, просто представить сейчас().

VALUES  
(<cfqueryparam cfsqltype="cf_sql_timestamp" value="#now()#"> 

Не связано с вашим вопросом, но я также добавил тег параметра запроса, который дает вам много преимуществ. Кроме того, формат, который я использовал, 1 поле на строку с запятыми слева облегчает комментировать события, если вам нужно устранить неполадки.

+2

, пожалуйста, не отправляйте переменные с непараметризированной формой в SQL-запросы. Используйте cfqueryparam http://help.adobe.com/en_US/ColdFusion/10.0/Developing/WSc3ff6d0ea77859461172e0811cbec22c24-7c36.html –

+2

Как вариант, какой бы метод вы ни использовали, будьте последовательны. В случаях, когда сервер db находится на другой машине, чем сервер CF, 'getDate()' и 'now()' могут возвращать разные результаты. Поэтому либо используйте тот, либо другой, а не оба. – Leigh

1

Предполагая, что вы используете Mysql, вы отправляете дату в неправильном формате. MySql хранит дату в формате yy/mm/dd. Поэтому, если вы меняете
<cfset var submit_date = #DateFormat(Now(),"mm/dd/yy - HH:mm:ss")#>
на
<cfset var submit_date = #DateFormat(Now(),"YY/MM/DD - HH:mm:ss")#>.
Должно работать нормально.

+2

Mysql, как и все базы данных, хранит даты как даты. Формат предназначен для показа. Учитывая, что DateFormat возвращает строку, использование ее для создания значения для поля даты может работать, но это не лучший метод. –

+0

@ DanBracuk, если вы проверите документацию MySql. В нем четко указано, что «Тип DATE используется для значений с частью даты, но без временной части. MySQL извлекает и отображает значения DATE в формате« YYYY-MM-DD », а тип DATETIME используется для значений, которые содержат как дату, так и время MySQL получает и отображает значения DATETIME в формате «YYYY-MM-DD HH: MM: SS». Пожалуйста, проверьте 1-й и 2-й абзацы http://dev.mysql.com/doc/refman/5.1/en/datetime.html –

+0

@DanBracuk, также если вы ищете «расслабленный» формат (без единой кавычки). Вы найдете пример, который наглядно демонстрирует, что MySql хранит даты в формате YYYY-MM-DD. –