两个具有相同操作的联系表单,无需复制代码

时间:2016-01-11 00:37:37

标签: php html forms

我的网站有两个联系表单(一个是模态可用,另一个是页面底部)。两种形式都具有相同的结构,例如相同的输入和名称等......它们都具有相同的动作方法。

我的问题是 - 如何在$ _POST变量依赖于提交的表单的两个表单上使用相同的操作方法?例如,如果我填写第二个联系表单,该操作将从第一个联系表单中获取数据。

我认为一种方法是给两个表单不同的id,例如firstForm和secondForm,然后将表单的id作为参数传递给action方法。虽然这可行,但我不确定它是否是一种有效的方式,或者是否有更简单的方法?

我完全无视这样一个事实,即我实际上可以制作两个单独的动作方法,但这只是荒谬和大量冗余编程,当我知道我可以只有一个动作方法来提供两种形式,但我只是在失去了如何正确实施它。

这是第一个:

<div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog" >
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
                <h3 id="myModalLabel">Flick me an email!</h3>
                <p>I will get back to you ASAP!</p>
            </div>
            <div class="modal-body">
                <div class="status alert alert-success" style="display: none"></div>
                <form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="assets/php/sendemail.php">
                    <div class="form-group"><input class="form-control required" type="text" name="name" placeholder="Name" data-placement="top"></div>
                    <div class="form-group"><input class="form-control email" type="email" name="email" placeholder="example@email.com" data-placement="top" ></div>
                    <div class="form-group"><textarea class="form-control" name="message" placeholder="Your message here.." data-placement="top" style="height: 200px;" ></textarea></div>
                    <div class="form-group"><button type="submit" id="modal-submit" class="btn btn-danger btn-lg">Send Message</button><button class="btn" data-dismiss="modal" aria-hidden="true" style="float: right;">Cancel</button> </div>
                </form>
            </div>
        </div>
    </div>
</div>

第二个:

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="assets/php/sendemail.php">
    <div class="row">
        <div class="col-sm-6">
            <div class="form-group">
                <input type="text" name="name" class="form-control" required="required"
                       placeholder="Name">
            </div>
        </div>
        <div class="col-sm-6">
            <div class="form-group">
                <input type="email" name="email" class="form-control" required="required"
                       placeholder="Email address">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-sm-12">
            <div class="form-group">
            <textarea name="message" id="message" required="required" class="form-control"
                      rows="8" placeholder="Message"></textarea>
            </div>
            <div class="form-group">
                <button type="submit" id="submit" class="btn btn-danger btn-lg">Send Message
                </button>
            </div>
        </div>
    </div>
</form>

2 个答案:

答案 0 :(得分:1)

在每个表单中,您都可以在<form> ... </form>标记之间添加隐藏的输入元素,以指示正在提交的表单。

在你的第一个表格中你可以有这个元素:

<input type="hidden" name="type" value="form1">

然后在第二个表单中添加此元素

<input type="hidden" name="type" value="form2">

提交表单时,接收PHP脚本可以将类型值读取为可以作用的post变量,例如,

if ($_POST['type']=='form1') {
    // Do this
} else if ($_POST['type']=='form2') {
    // Do this instead
}

也许你想要添加隐藏的输入,你可以在表单动作的GET字符串中添加一个参数。

因此,在您的第一个表单中,您可以执行此操作 - 在操作结束时添加?type=form1

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="assets/php/sendemail.php?type=form1">

并且,在您的第二个表单中,您可以执行此操作 - 在操作结束时添加?type=form2

<form id="main-contact-form" class="contact-form" name="contact-form" method="post" action="assets/php/sendemail.php?type=form2">

在sendmail.php脚本中,您可以使用$_GET变量访问该值:

if ($_GET['type']=='form1') {
    // Do this
} else if ($_GET['type']=='form2') {
    // Do this instead
}

答案 1 :(得分:0)

放置一个:

<input type="hidden" name="formPosted" value="1"> 

在每个表单内部都有对特定php文件的操作,并且对于每个表单更改输入值,然后在php中使用if else来查看提交的表单:)然后你的代码......:)