1

私は2つのフォームを持っています。form1 には、名前と住所の両方を入力する必要があります。これらのエントリのいずれかが欠落している場合、サーバー側の検証を行った後にエラー メッセージが表示されます。エラーがなければ、form1 に入力された結果が form2 に表示されます。バリデーションが成功した後に CFLOCATION を実行しましたが、form1 に入力されたデータが form2 に渡されません。txtName and txtAddress are undefined in form (2) というメッセージが表示されます。サーバー側の検証が成功した後、最初の画面から別の画面にデータを渡すにはどうすればよいですか? どんな提案でも大歓迎です。以下に私のコードを見つけてください

フォーム1

<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>

フォーム2

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

3 に答える 3

1

この回答は、このコメントへの回答です。

フォーム フィールドのサーバー側検証には、少なくとも 3 つの方法があります。必要なページ数の順に、1ページ方式から始めます。すべてのコードは 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.

2 ページ方式の場合、PageWithForm.cfm は FormProcess.cfm に送信されます。FormProcess.cfm のコードは、上で説明したものとほとんど同じです。唯一の違いは、

 code to produce form goes here

になる

 code for no form submitted goes here.

3 ページ メソッドには、PageWithForm.cfm、FormValidate.cfm、および FormProcess.cfm があります。これはあなたが試みているもののようです。問題は、FormValidate.cfm が値を FormProcess.cfm に渡す方法です。少なくとも3つの方法があります。

  1. それらをセッション変数にします。
  2. それらを url 変数にして、cflocation を使用します
  3. FormValidate.cfm で別のフォームを作成し、元の値を隠しフィールドに転送して、javascript で送信します。

セッション変数は予期せず変更される可能性があるため、あまり好きではありません。私は URL 変数よりも新しいフォームを好みますが、それは私だけです。

私が説明したすべての方法が機能します。最善の方法は、目の前の状況に依存する場合もあれば、まったく問題にならない場合もあります。私はめったに1ページ方式を使用しません。通常は 2 ページ方式を使用します。しかし、それは私だけです。

于 2014-05-18T12:31:27.267 に答える
0

あなたが尋ねようとしているのはこれに近いと思います:

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の作業の一部も含まれています

于 2014-05-18T05:49:51.320 に答える