Проверка формы на стороне сервера Coldfusion - как отобразить данные, введенные в одной форме, в другую форму

У меня есть две формы. В форме 1 необходимо указать имя и адрес. Если одна из этих записей отсутствует, после проверки на стороне сервера отображается сообщение об ошибке. Если ошибок нет, результаты, введенные в form1, должны отображаться в form2. Я выполнил CFLOCATION после успешной проверки, но данные, введенные в form1, не передаются в form2. Я получаю сообщения txtName и txtAddress не определены в форме (2). Как передать данные с первого экрана на другой после успешной проверки на стороне сервера? Любое предложение высоко ценится. Ниже, пожалуйста, найдите мой код

Form1

<cfif isDefined("form.btnSubmit")>
    <cfif len(trim(#form.txtName#)) GT 0  and len(trim(#form.txtAddress#)) GT 0>>
         <cflocation url="form2.cfm" addtoken="true">
    <cfelse>
        <H3>Name and address must be entered</H2>
    </cfif>
</cfif>

<cfform action="form1.cfm" method="post">
    User ID:<cfinput type="Text" name="txtName"><br>
    Phone: <cfinput type="Text" name="txtAddress"><br>
    <cfinput type="submit" name="btnSubmit" value="Validate"><br>
</cfform>

Form2

<H2>You made the following entries </H2>
<p> Name: <cfoutput>#form.txtName#</cfoutput></p>
<p> Address: <cfoutput>#form.txtAddress#</cfoutput></p>

3 ответа

cfloction не отправляет форму, он просто перенаправляет пользователя на новую страницу. Если вы хотите, чтобы данные, отправленные первой формой, отображались во второй форме, добавьте вторую форму на страницу, на которой в данный момент находится ваша cflocation, и выполните проверку там. Если требуемые данные есть, заполните данные второй формы. В противном случае вы можете отправить их обратно в первую форму.

Этот ответ является ответом на этот комментарий: "Является ли метод, описанный выше, выполнение проверки в форме 2, наилучшей практикой для выполнения проверки на стороне сервера?"

Существует как минимум три метода проверки полей формы на стороне сервера. В порядке количества требуемых страниц мы начнем с метода 1 страницы. Весь код на одной странице. Это выглядит примерно так:

 if (a form was submitted)
 validation code goes here

 if (you had good data)
 code to process form fields goes here
 else
 code for problems with form fields goes here

 else // no form submitted
 code to produce form goes here.

Для двухстраничного метода PageWithForm.cfm отправляется в FormProcess.cfm. Код в FormProcess.cfm будет почти таким же, как описано выше. Единственная разница в том, что

 code to produce form goes here

становится

 code for no form submitted goes here.

Трехстраничный метод имеет PageWithForm.cfm, FormValidate.cfm и FormProcess.cfm. Похоже, это то, что вы пытаетесь. Вопрос в том, как FormValidate.cfm передает значения в FormProcess.cfm. Есть как минимум 3 метода.

  1. Сделайте их переменными сеанса.
  2. Сделайте их переменными URL и используйте cflocation
  3. Создайте другую форму в FormValidate.cfm, перенесите исходные значения в скрытые поля и отправьте их с помощью javascript.

Мне меньше всего нравятся переменные сеанса, потому что они могут быть неожиданно изменены. Я предпочитаю новую форму URL-переменным, но это только я.

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

Я думаю, что вы пытаетесь спросить, ближе к этому:

form1.cfm

<cfparam name="url.message" default="">

<cfif url.message EQ 1>
    <H3>Name and address must be entered</H3>
</cfif>

<cfform action="form2.cfm" method="post">
   User ID:<cfinput type="Text" name="txtName"><br>
   Phone: <cfinput type="Text" name="txtAddress"><br>
   <cfinput type="submit" value="Validate"><br>
</cfform>

form2.cfm

<cfif len(trim(form.txtName)) EQ 0  and len(trim(form.txtAddress)) EQ 0>
     <cflocation url="form1.cfm?message=1" addtoken="false">
</cfif>


<H2>You made the following entries </H2>
<p> Name: <cfoutput>#form.txtName#</cfoutput></p>
<p> Address: <cfoutput>#form.txtAddress#</cfoutput></p>

При проверке обязательных полей

В наше время существует 5 основных подходов

  1. Используйте библиотеку jQuery для принудительного заполнения обязательных полей
  2. Написать собственный Javascript для проверки обязательных полей
  3. Используйте атрибуты HTML 5 для обеспечения обязательных полей
  4. использование <cfform> обеспечить обязательные поля
  5. Сделайте так, чтобы на странице ответов были обязательные поля

Есть компромиссы с каждым подходом. Ваш вопрос, кажется, подход 5, но он также включает в себя некоторые работы для подхода 4

Другие вопросы по тегам