2016-01-11 27 views
0

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

我的问题是 - 我怎样才能在两个窗体上使用相同的操作方法,其中$ _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="[email protected]" 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> 
+0

从当一个提交将与一些JavaScript的其它形式获取数据最简单的方法。 – wogsland

+0

说我提交第二个表单,操作方法是扫描整个DOM寻找名为'名称'的任何输入,它从第一个实例抓取它,当然这是第一个形式 – AnonDCX

+0

两种形式是完全相同的 - 相同的输入字段具有相同的名称。如果我提交第二个表单,action方法从第一个表单获取数据,这就是为什么我假设它为'posted'变量的第一个实例扫描DOM – AnonDCX

回答

1

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

在你的第一种形式,你可以有这样的元素:

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

然后在你的第二个窗体添加这个元素

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

当你的表单提交,接收PHP脚本可以读取类型值变量后,可能你的行为上,例如,

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

放置一个:

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

有作用于特定的PHP文件中的每个表格内,并为每个表单更改输入值,然后在PHP中使用if else来查看提交哪个表单:)然后您的代码... :)

相关问题