как сделать 2 действия на 1 кнопку отправки - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть форма с кнопкой отправки. Когда кнопка отправки нажата, она отправляет информацию в 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 ]

3 голосов
/ 06 февраля 2012

Этот 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 голос
/ 06 февраля 2012

Поскольку вы отправляете form на той же странице, сервер (после обработки любого кода PHP на этой странице) отобразит эту страницу.У вас есть несколько вариантов здесь:

  1. Отправка формы на другую страницу.
  2. Перенаправление со страницы после обработки формы.

Первый вариант будет означать, что вы измените action в form на что-то вроде этого:

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

Это будет означать, что formhandler.php (или как вы решитечтобы вызвать ее) будет иметь PHP-код на стороне сервера для обработки формы, а затем на этой странице будет отображаться все, что вы хотите, чтобы она отображалась.

Второй вариант будет включать просто использование перенаправления в вашем PHP-коде (на странице, на которую вы уже отправляете), чтобы направить пользователя на другую страницу после обработки формы. PHP header() функция является стандартным способом сделать это.Примерно так:

header("Location: thankyou.php");

Этот должен по сути быть последним, что PHP-код делает после обработки вашей формы.То есть вы, вероятно, не хотите, чтобы ваш код на стороне сервера продолжал выполняться после того, что интуитивно было бы завершающим случаем.Таким образом, вы захотите вызвать exit сразу после этого, чтобы остановить выполнение страницы.(Имейте в виду, что фактическое перенаправление не является действием на стороне сервера, сервер просто отправляет заголовок Location в браузер и сообщает браузеру, что it должен выполнить перенаправление.)

(Кроме того, как отмечено в других ответах здесь, в противном случае не должно быть никакого вывода на страницу при выполнении такого перенаправления.)

Кроме того, я полагаю, что вы также можете иметь условный вывод на своей странице PHPотображение одного набора содержимого HTML (формы), если он не обрабатывает POST, или другого набора содержимого (страницы благодарности), если он обрабатывает POST, но для меня это похоже на скользкий уклон.Лучше разделить ресурсы на стороне сервера, чем иметь один именованный ресурс (somepage.php), который делает разные вещи условно.(Принцип единой ответственности)

0 голосов
/ 06 февраля 2012

всегда может использовать JS

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


    //do mysql stuff here

    ?>
    <script type="text/javascript">
    <!--
    window.location = "thankyou.html "
    //-->
    </script><?
    }?>
0 голосов
/ 06 февраля 2012

Я бы предложил просто поместить действие на страницу thankyou.php и поместить код вставки mysql на эту страницу, используя post для данных.

<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/'); ?>
...