ColdFusion не может прочитать значение параметра cfselect

Я новичок в ColdFusion, и я просто пробую некоторые основные функции. Я попытался выполнить простой запрос и поместить значения в элемент. В качестве значения для элемента я попытался установить идентификатор каждой записи запроса. После отправки я попытался прочитать выбранное значение, но получаю только

Вы выбрали #getAll.id#

Вот мой код:

index.cfm

<cfquery datasource="testdb" name="getAll">
  select *
  from Personen
</cfquery>
<cfform action="chosen.cfm" method="post">
  <cfselect name="listPersons">
    <cfloop query="getAll">
      <option value="#getAll.id#"><cfoutput>#getAll.id# #getAll.name# #getAll.vorname# #getAll.gebdate# <BR></cfoutput>
    </cfloop>
  </cfselect>
  <cfinput type="Submit" name="Senden" value="Senden">
</cfform>

выбранный.cfm

<cfoutput>You have chosen #listPersons#</cfoutput>

Можете ли вы сказать мне, где я сделал ошибку?


person noah    schedule 12.05.2014    source источник
comment
Ничего общего с вашим вопросом, но полезно привыкнуть к области видимости ваших переменных. Вместо записи #listPersons# в файле selected.cfm используйте #FORM.listPersons#, как в примере Мэтта.   -  person Leigh    schedule 13.05.2014


Ответы (3)


Вы не поместили свой атрибут value в тег cfoutput, поэтому он обрабатывается как #getAll.id# в качестве ключа в структуре вместо значения из запроса. Если вы обновите свой cfloop до cfoutput, ваша проблема будет устранена.

Пара указателей. Вы должны ограничить переменную в selected.cfm, и вам не нужно использовать cfform, обычный form работает отлично.

<cfquery datasource="testdb" name="getAll">
  select *
  from Personen
</cfquery>
<form action="chosen.cfm" method="post">
  <select name="listPersons">
    <cfoutput query="getAll">
      <option value="#getAll.id#">#getAll.id# #getAll.name# #getAll.vorname#     #getAll.gebdate#</option>
    </cfoutput>
  </select>
  <input type="Submit" name="Senden" value="Senden">
</form>

выбранный.cfm

<cfoutput>You have chosen #form.listPersons#</cfoutput>
person Matt Busche    schedule 12.05.2014
comment
Закрывающий тег </option> не является обязательным: developer.mozilla.org /en-US/docs/Web/HTML/Element/option - person duncan; 12.05.2014
comment
@duncan, это имеет смысл. Однако я понял его фактическую ошибку и обновил свой ответ, чтобы отразить это (хотя мое первоначальное решение действительно решило его проблему, я объяснил это неправильно) - person Matt Busche; 12.05.2014
comment
Еще проще было бы использовать атрибуты запроса, значения и отображения cfselect. - person Dan Bracuk; 12.05.2014
comment
Большое спасибо, теперь это работает ..! Сначала у меня был cfoutput, но потом результат был таким: Person 1 Person 2 Person 3 <br/> Person 2 Person 3 <br/> Person 3 и если я использую form вместо cfform, я получаю сообщение об ошибке.. - person noah; 13.05.2014
comment
я получаю сообщение об ошибке Это говорит о том, что вы все еще используете некоторые элементы формы, специфичные для CF (cfselect, cfinput, ...), которые должны быть вложены внутри cfform. Замените их эквивалентом html (select, input, ...), и он должен нормально работать с обычным form. - person Leigh; 13.05.2014
comment
хорошо, спасибо, теперь я вижу .. и если я использую обычные HTML-теги, нет никаких недостатков? - person noah; 15.05.2014

Ваш код работает для меня с моей тестовой базой данных, но значение listPersons в Chosen.cfm не то, что, я думаю, вы хотели. Я бы изменил код на следующий:

<cfquery datasource="testdb" name="getAll">
  select *
  from Personen
</cfquery>
<cfform action="chosen.cfm" method="post">
  <cfselect name="listPersons">
    <cfoutput query="getAll">
      <option value="#getAll.id#">#getAll.id# #HTMLEditFormat(getAll.name)# #HTMLEditFormat(getAll.vorname)# #getAll.gebdate# 
    </cfoutput>
  </cfselect>
  <cfinput type="Submit" name="Senden" value="Senden">
</cfform>

Что я сделал, так это изменил ваш CFLOOP на CFOUTPUT, а затем удалил CFOUTPUT, который у вас был. Я также добавил функции HTMLEditFormat на тот случай, если NAME или VORNAME содержат некоторые символы, которые не будут хорошо смотреться на дисплее. Я предположил, что идентификатор является числовым, а GEBDATE — датой, поэтому решил, что в этом нет необходимости. Я также удалил элемент BR из вашего ВАРИАНТА, не то чтобы я думал, что это вызывает проблему, но я не мог понять, как это повлияет на отображение, поэтому это казалось ненужным. Я бы лично закрыл ВАРИАНТ, но он не нужен для запуска. Если ваш окончательный код не запускает ничего из того, что предлагает CFFORM, я бы не стал его использовать, а просто использовал HTML FORM.

Затем на Chosen.cfm я бы оценил вывод:

<cfoutput>#Form.listPersons#</cfoutput>
person Snipe656    schedule 12.05.2014

<cfoutput query="getAll">
#id# #name# 
</cfoutput>

Вам не нужно повторять имя запроса внутри цикла cfoutput, если с помощью cfoutput вы указываете запрос, который вы выполняете в цикле.

person jaywebguy    schedule 12.05.2014
comment
Не совсем ответ, но плюс один, потому что его репутация слишком низка, чтобы комментировать. - person Dan Bracuk; 13.05.2014