2017-02-23 33 views
1

Я хочу сохранить значения, выбранные пользователем в форме после отправки формы.Сохранение значений формы на странице

Это то, что я пробовал:

<cfset tx_name = ""> 
<cfset id_age1 = ""> 

<cfif isDefined("form.tx_name")> 
    <cfset tx_name = form.tx_name> 

    <cfif isDefined("a1")> 
     <cfset id_age1 = form.a1> 
    </cfif> 
</cfif> 

<cfoutput> 

<input type="text" name="tx_name" value="#tx_name#"> 

<select name="id_age1"> 
    <cfloop from="1" to="20" index="a1"> 
     <option value="#a1#">#a1#</option> 
    </cfloop> 
</select> 

</cfoutput> 

Я получаю ожидаемый результат для tx_name, однако, id_age1 не отображается правильный результат. Он просто сбрасывается обратно до 1. Что я делаю не так?

ответ

4

Большая часть этого кода не требуется. Чтобы определить значения по умолчанию для переменных, которые не существуют (отличные от пустых), просто используйте cfparam. Обязательно укажите переменную область, чтобы избежать неожиданных результатов из области видимости конфликтов:

<cfparam name="form.tx_name" default=""> 
    <cfparam name="form.id_age1" default=""> 

Для предварительного выбора элемента в <select> списке, вы должны apply the selected attribute to the appropriate <option>:

<select name="id_age1"> 
    <cfloop ...> 
     <option value="#a1#" <cfif a1 eq form.id_age1>selected</cfif>> 
     #a1# 
     </option> 
    </cfloop> 
</select> 

Кроме того, не уверен, он был упущен намеренно, но .. поля двух форм должны быть вложены в теги <form>.

+0

Это сработало, хотя я попробовал его с помощью < selected '. Спасибо. – gosi123

+2

@ gosi123 - Лучше охватить переменную, то есть 'form.id_age1', чтобы избежать случайных конфликтов областей. Можно создать одно и то же имя переменной в нескольких областях. Пример 'variables.something' и' form.something'. В некоторых случаях это может привести к неожиданным результатам. Определение ваших переменных снижает вероятность этого. – Leigh

+1

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

2

Я знаю, что это скорее комментарий, но его легче читать как ответ.

Код на входе не является безопасным. Он подпадает под HTML-инъекцию. См:

<cfparam name="form.tx_name" default=""> 
... 
<input type="text" name="tx_name" value="#EncodeForHTMLAttribute(tx_name)#" /> 

ColdFusion имеет ряд функций для решения этой проблемы. См.: http://blogs.adobe.com/security/2014/05/coldfusion-11-enhances-the-security-foundation-of-coldfusion-10.html

+0

Да, хороший момент. – Leigh