2016-06-01 5 views
0

10の異なるプロパティの10の異なるページを持つWebサイトを開発しています。各ページには、予定を設定するための2つのフォームと、他のもののための1つのフォームがあります。どのように各フォームを処理するのですか?今私は各フォームの処理ページを持っています。したがって、合計20の異なる処理ページ。すべての変数、名前、およびIDについては、2..3 ... 4..etcを追加します。各フォームのこれは正しい方法ですか?複数のフォームをPHPで処理する方法

あなたは2つのだけのフォームを必要とし、フォームが送信されますと、あなたの処理のページが何に知っているように、各フォームの中に、あなたは、その特定のフォームのIDを含む隠しと読み取り専用の入力を追加
 <form role="form" id="apptform2" name="apptform2" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="POST"> 
      <div class="form-group cushion"> 
       <label for="apptName2">Full Name*</label> 
       <input type="text" name="apptName2" class="form-control" id="apptName2" placeholder="Last, First"> 
       <?php if (isset($apptErrors2['apptNamePgTwo1'])) { echo '<div class = "pink-text"/><p>', $apptErrors2['apptNamePgTwo1'] , '</p></div>'; } ?> 
       <?php if (isset($apptErrors2['apptNamePgTwo2'])) { echo '<div class = "pink-text"/><p>', $apptErrors2['apptNamePgTwo2'] , '</p></div>'; } ?> 
       <?php if (isset($apptErrors2['apptNameLengthPgTwo'])) { echo '<div class = "pink-text"/><p>', $apptErrors2['apptNameLengthPgTwo'] , '</p></div>'; } ?> 
      </div> 
      <div class="form-group cushion"> 
       <label for="apptEmail2">Email address*</label> 
       <input type="email" name="apptEmail2" class="form-control" id="apptEmail2" placeholder="Email"> 
       <?php if (isset($apptErrors2['apptEmailPgTwo1'])) { echo '<div class = "pink-text"/><p>', $apptErrors2['apptEmailPgTwo1'] , '</p></div>'; } ?> 
       <?php if (isset($apptErrors2['apptEmailPgTwo2'])) { echo '<div class = "pink-text"/><p>', $apptErrors2['apptEmailPgTwo2'] , '</p></div>'; } ?> 
      </div> 
      <div class="form-group cushion"> 
       <label for="apptPhone2">Phone*</label> 
       <input type="text" name="apptPhone2" class="form-control" id="apptPhone2" placeholder="Phone"> 
       <?php if (isset($apptErrors2['apptPhonePgTwo2'])) { echo '<div class = "pink-text"/><p>', $apptErrors2['apptPhonePgTwo2'] , '</p></div>'; } ?> 
      </div> 

      <div class="form-group cushion"> 
       <label for="apptMessage2">Message:</label> 
       <textarea class="form-control" name="apptMessage2" rows="5" id="apptMessage2"></textarea> 
      </div> 

      <div class="cushion text-center"> 
       <button type="submit" name="appt-form-2" class="btn btn-danger btn-md">Request</button> 
      </div> 
     </form> 
+2

ですね。質問に2つのスクリプトを追加すると、重複しているかどうかがわかります(変数名が異なる)。 – JimL

答えて

0

データを処理します。すべての処理ページは、どのフォームが送信されたかを知るために "form_id"フィールドにあるものを調べるだけです。

例:

<form action="processingpage.php"> 
<input type="text" name="form_id" value="AppointmentForm" readonly/> 
... 
</form> 

<form action="processingpage.php"> 
<input type="text" name="form_id" value="SomethingElseForm" readonly/> 
... 
</form> 

技術的に、あなたは隠されたが、「form_id」の入力を廃止し、ちょうど2つの異なる処理ページを使用しますが、あなたは絶対にただ一つの処理を使用する必要があれば、私は上記の例がある可能性がありページ。

0

私が間違ったことを理解できなかった場合、現在のページにとどまって別々に処理する必要があります。

  1. ページごとに1つのフォーム これはあなたにクリーンなデザインを与えるだろうし、おそらく、ユーザがより直感的に理解できるだろう。そして、私が言うことができる2つの選択肢があります。

  2. 各フォームを非同期で処理します。 対象のiframe(How do you post to an iframe?)を使用するか、JavaScript関数を使用してそれを行うことができます。

JavaScriptを使用すると、より洗練された表現ですが、より多くの作業が必要になります。次のようなことができます:

$("#form-id").submit(function(e){ 
    e.preventDefault(); 
    var form = {}; 
    form.field1 = $("#field1").val(); 
    form.field2 = $("#field2").val(); 
    var url = "your-submit-url"; 

    $.post(url, form) 
    .done(function(data) { 
     // do some success action 
    }) 
    .fail(function(){ 
     // do some failure action 
    }) 
    .always(function(){ 
     // do some action (optional) at the end 
    }); 
}); 
+0

'var form = $(this); $ .post(form.attr( 'action')、form、serialize()) ' – Steve

+0

私は明示的な方が好きですが、スティーブが言っていることは、フォームを手作業で記入するのを防ぐための素晴らしい改善です。 – Ender

0

ありがとうございました。これが私のやり方です。私は各フォームに隠れた入力タイプを追加します。

<input type="hidden" value="Listing One" name="apptType"> 

私は1つの処理ページを使用しています。私は、私は、フォームが記入されているかを識別し、情報を電子メールで送信することができ、これを追加処理]ページで:あなたは20、二つの異なるフォーム処理スクリプトをする必要はありませんように

 if (isset($_POST['apptType'])): 

      if ($_POST['apptType']== "Listing One"): 

      $messagePt = "Some message here:"; 
      $headerPT ="location: some page here" ; 

      endif; 

      (repeat above code for each value "Listing One" thru "Listing Ten") 

     end if; 
関連する問題