如何在一个提交按钮上有两个操作

how to have 2 actions on 1 submit button

本文关键字:操作 两个 按钮 一个 提交      更新时间:2023-09-26

我有一个带有提交按钮的表单。当点击提交按钮时,它会将信息发送到mysql。这一切都在起作用,但当点击提交按钮时,它只是重新加载页面。我想让它去发送信息到mysql,然后去页面谢谢.html。

我的提交按钮是:

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

我的表单操作是:

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

此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标记放在文件的顶部,不要打印或回显任何内容。

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

  1. 将表单提交到不同的页面
  2. 处理完表单后从页面重定向

第一个选项意味着您可以将form中的action更改为以下内容:

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

这意味着formhandler.php(或您决定调用它的任何名称)将有服务器端PHP代码来处理表单,然后该页面将显示您希望它显示的任何内容。

第二种选择是在你的PHP代码中(在你已经提交的页面上)使用重定向,在处理表单后将用户引导到另一个页面。PHP header()函数是实现这一点的标准方法。类似这样的东西:

header("Location: thankyou.php");

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

(此外,正如这里的其他答案中所指出的,在执行这样的重定向时,不应该有对页面的输出。)

此外,我想你也可以在你的PHP页面上有条件输出,如果它没有处理POST,则显示一组HTML内容(表单),如果它正在处理POST,那么显示另一组内容(感谢页面),但对我来说,这是一个滑坡。与其让一个命名资源(somepage.php)有条件地做不同的事情,不如将服务器端资源分开。(单一责任原则)

可以始终使用JS

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

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

我建议将操作放在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/'); ?>