如何在1个提交按钮上执行2个操作

时间:2012-02-06 14:40:04

标签: php javascript forms onsubmit

我有一个带有提交按钮的表单。单击提交按钮时,它会将信息发送到mysql。这一切都正常,但是当点击提交按钮时它只是重新加载页面。我希望它将信息发送到mysql然后转到页面thankyou.html。

我的提交按钮是:

<input type="submit" name="submit" id="submit" value="Submit" /> 

我的表格行动是:

<form name="list"; action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" >

4 个答案:

答案 0 :(得分:3)

这个PHP代码会将你发送到另一个页面:

<?php
if ($_POST) { // check something is being sent by the form
    // MySQL stuff here...
    header("location:thankyou.html");
    exit;
}
?>
// put the form here

或者您可以将插入数据的php放在thankyou.html顶部的数据库中,然后将表单提交到那里。

我个人喜欢将插页保留在与表单相同的页面上,但这只是个人选择。

重要:在调用php重定向之前,页面上没有任何输出,甚至没有空白,所以一定要把你的开放php标签放在文件的顶部,不打印或回复任何东西。

答案 1 :(得分:1)

由于您将form提交到同一页面,服务器将(在处理该页面上的任何PHP代码之后)显示该页面。你有几个选择:

  1. 将表单提交到不同的页面。
  2. 处理表单后从页面重定向。
  3. 第一个选项意味着您要将action中的form更改为以下内容:

    <form name="list" action="formhandler.php" method="post">
    

    这意味着formhandler.php(或者你决定调用它的任何东西)将拥有处理表单的服务器端PHP代码,然后该页面将显示你想要显示的任何内容。

    第二个选项只涉及在PHP代码中使用重定向(在您已提交的页面上),以便在处理表单后将用户定向到其他页面。 PHP header() function是执行此操作的标准方法。像这样:

    header("Location: thankyou.php");
    

    这个应该本质上是PHP代码在处理表单后所做的最后一件事。也就是说,您可能不希望服务器端代码在直观的终止案例之后继续执行。因此,您需要立即调用exit来停止页面执行。 (请记住,实际重定向不是服务器端操作,服务器只是将Location标头发送到浏览器并告诉浏览器 it 应该执行重定向。 )

    (另外,如此处的其他答案所述,执行此类重定向时,页面应该没有输出。)

    此外,我想你也可以在PHP页面上有条件输出,如果它没有处理POST或另一组内容(感谢页面),如果它正在处理一个HTML内容(表单) POST,但对我来说这感觉就像一个滑坡。分离服务器端资源比使一个命名资源(somepage.php)有条件地执行不同的事情更好。 (单一责任原则)

答案 2 :(得分:0)

我建议将操作放在thankyou.php页面上,并使用post的数据将mysql插入代码放在该页面上。

<form name="list" action="thankyou.php" method="post">

此外,如果您希望所有内容都在同一页面上,则可以使用

<form name="list" action="<?php echo $_SERVER['PHP_SELF']; ?>?submit=1" method="post" >

在页面顶部的PHP代码中,快速执行

<?php if ($_GET['submit'] == '1') header('Location: http://www.example.com/'); ?>

答案 3 :(得分:0)

总是可以使用JS

<? if(!empty($_POST['submit']){


    //do mysql stuff here

    ?>
    <script type="text/javascript">
    <!--
    window.location = "thankyou.html "
    //-->
    </script><?
    }?>