如何使用php处理多个表单

时间:2016-06-01 20:13:34

标签: php forms

我正在开发一个网站,该网站将包含10个不同属性的十个不同页面。每个页面都有两个表单,一个用于设置约会,另一个用于其他设置。我如何处理每个表格?现在我有一个每个表单的处理页面。所以总共有20个不同的处理页面。对于所有变量,名称和ID,我添加一个2..3 ... 4 ..等。对于每个表格。这是正确的做法吗?

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

3 个答案:

答案 0 :(得分:0)

您只需要两个表单,并在每个表单中添加一个包含该特定表单ID的隐藏和只读输入,以便在提交表单时,您的处理页面将知道如何处理数据。所有处理页面都必须查看&#34; form_id&#34;中的内容。字段以了解提交的表单。

示例:

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

从技术上讲,你可以取消隐藏的&#34; form_id&#34;输入并只使用两个不同的处理页面,但我上面提供的例子是你绝对必须只使用一个处理页面。

答案 1 :(得分:0)

如果我没有理解错误,您希望通过留在当前页面来单独处理它们。然后我可以告诉我有两种选择:

  1. 每页一页 这将为您提供简洁的设计,并且可能会更直观地被用户理解。

  2. 异步处理每个表单。 您可以使用目标iframe(How do you post to an iframe?),也可以使用JavaScript函数来执行此操作。

  3. 使用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
        });
    });
    

答案 2 :(得分:0)

感谢您的帮助。这就是我最终做到的方式。我在每个表单上添加一个隐藏的输入类型。

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

我只使用一个处理页面。在处理页面上,我添加了这个,以便我可以识别正在填写的表单,并通过电子邮件发送信息:

        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;