Перенаправить PHP после запуска скрипта - PullRequest
0 голосов
/ 07 января 2011

У меня есть скрипт, который отправляет электронные письма, введенные в форму, в базу данных, и мне интересно, есть ли способ перенаправить скрипт PHP после отправки письма?

Мой сценарий -

<?php
$con = mysql_connect("localhost","User","Pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("emails", $con);

$sql="INSERT INTO mlist (email)
VALUES
('$_POST[email]'')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }

mysql_close($con)
?> 

пожалуйста, кто-нибудь может дать четкие инструкции, так как я все еще изучаю PHP.

Ответы [ 7 ]

3 голосов
/ 07 января 2011

Чтобы сделать это перенаправление еще на один шаг вперед.Заголовок «местоположение» должен использоваться с кодом ответа 302 вместо классического кода ответа 200.Код ответа Thios является «глобальным» для ответа HTTP.302 означает «перенаправление».Большинство браузеров обрабатывают заголовок местоположения даже без кода ответа 302, но вы должны установить его (это может помочь, например, при обработке вашего ответа с помощью ajax).

header("Location: /foo.php",TRUE,302);

Теперь еще один шаг.На самом деле код ответа 303 (см. Другое) является лучшим кодом ответа перенаправления.Он также называется перенаправлением после публикации .Это специальное перенаправление означает для вашего браузера, что на самом деле это не перенаправление, потому что страница, которую он спросил, находится не в том месте, но это действительно перенаправление, потому что после вашего действия POST вам нужен новый результат страницы.

header("Location: /foo.php",TRUE,303);

Редактировать: , как указано в тридцатке, лучше использовать абсолютный URL в перенаправлении

header("Location: http://www.example.com/foo.php",TRUE,303);

Помните, что POST подразумевает потенциальные изменения данных (что GET-запрос не должен подразумевать).POST, за которым следует 303, - правильный путь, и он не позволит вашей кнопке BACK повторить тот же запрос.

2 голосов
/ 07 января 2011

Использование:

$url = 'http://your.redirect.url';
header('Location: ' . $url);
1 голос
/ 07 января 2011

Этот код, взятый из справочной страницы header(), будет перенаправлен на другую страницу в том же домене и в том же каталоге:

/* Redirect to a different page in the current directory that was requested */
$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
1 голос
/ 07 января 2011

Попробуйте это:

mysql_select_db("emails", $con);

$sql="INSERT INTO mlist (email) VALUES ('$_POST[email]'')";

if (!mysql_query($sql,$con)) { die('Error: ' . mysql_error()); }

mysql_close($con);

header('Location: http://www.example.com/');
0 голосов
/ 02 апреля 2013

Добавить функцию отправки заголовка

<?php
$con = mysql_connect("localhost","User","Pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("emails", $con);

$sql="INSERT INTO mlist (email)
VALUES
('$_POST[email]'')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }else{
header("Location: ".$_SERVER["HTTP_REFERER"]);
}

mysql_close($con)
?> 

Или отправить JavaScript с кодом

<?php
$con = mysql_connect("localhost","User","Pass");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("emails", $con);

$sql="INSERT INTO mlist (email)
VALUES
('$_POST[email]'')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }else{

echo "<script>";
    echo "window.location.href= '".$_SERVER["HTTP_REFERER"]."';";
echo "</script>";

}

mysql_close($con)
?> 
0 голосов
/ 07 января 2011
header("Location http://www.example.com");

Это перенаправит браузер на example.com, обратите внимание, что вы можете использовать его, только если вывод еще не был отправлен в браузер, например, убедитесь, что у вас есть echo, print или var_dumpзаявления перед использованием header()

0 голосов
/ 07 января 2011

Перенаправление в контроллере.

header ('Location: http://www.yoursite.com/new_page.html');

...