2012-02-06 2 views
2

У меня есть форма с кнопкой отправки. Когда нажата кнопка отправки, она отправляет информацию в mysql. Это все работает, однако при нажатии кнопки отправки он просто перезагружает страницу. Я хочу, чтобы он отправил информацию в mysql, затем перейдите на страницу thankyou.html.Как сделать 2 действия на 1 кнопку отправки

кнопку Моя представить это:

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

моя форма действия:

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

Nit picky point: Ваша форма не «отправляет данные в mysql». Он отправляется на скрипт PHP, а скрипт THAT работает с mysql. –

ответ

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 открытия прямо в верхней части файла, а не для печати или эхо ничего.

+0

Я действительно думаю, что это излишне (или, может быть, я неправильно понял вопрос ...) – JMax

+1

«header» следует использовать после операции «mysql» и перед любым выходом. Предполагая, что текущий файл обрабатывает операцию mysql. – gustyaquino

+0

@JMax: Действительно? Как я уже сказал, мне нравится сохранять код вставки на той же странице, что и сама форма, поэтому я часто использую перенаправление заголовка (если я не использую шаблоны). Я предполагаю, что на сервере крошечный бит больше, потому что он загружает два файла, но я уверен, что OP не реализует его на узле с высоким трафиком ;-) –

0

Я бы предложил просто отправить действие на страницу thankyou.php и поместить код вставки 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/'); ?> 
+0

спасибо, что просто кладет% 20?>? Submit = 1 после моей ссылки? например например, моя форма была на www.google.com/login.php, она отправляется на www.google.com/login.php%20?>?submit=1, когда нажата кнопка отправки – user1191294

0

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

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


    //do mysql stuff here 

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

... и если JS не является включен? –

+0

и когда это лучше, чем 'header (" Location: x ");'? – Bazzz

1

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

  1. Submit формы к различной страницы.
  2. Перенаправление со страницы после обработки формы.

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

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

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

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

header("Location: thankyou.php"); 

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

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

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

+1

«Это будет, по сути, последним, что делает PHP-код после обработки вашей формы». Это не так. Заголовок влияет только на браузер - PHP-скрипт будет продолжать работать до тех пор, пока он не завершится, поэтому вы всегда должны следовать этой строке с 'exit;'. Это то, что вы обычно изучаете трудным путем =] –

+0

@Grim ...: Хороший момент, я отредактирую, чтобы быть более ясным, что я имею в виду ... – David

+0

спасибо Дэвиду и Грим, @Grim, вы говорите, что код заголовка должен войдите в ту же самую инструкцию if, что и ваш код вставки SQL. Что ты имеешь в виду? не могли бы вы запустить пример, если это возможно? – user1191294

Смежные вопросы