Я хотел бы, чтобы моя форма (на основе Swift Mailer) перенаправлялась на ссылку с помощью header();
Проблема в том, что я просто не могу понять, где разместить header();
чтобы форма была успешно отправлена, а человек перенаправлен. Это текущий код:
<?php
if(isset($_POST['email'])) {
// Require the Swift Mailer library
require_once 'lib/swift_required.php';
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl' )
->setUsername('xxxx')
->setPassword('xxxx')
;
$mailer = Swift_Mailer::newInstance($transport);
foreach ($_POST as $key => $value)
$messageText .= ucfirst($key).": ".$value."\n\n";
$message = Swift_Message::newInstance('A message from Pivot Template Form')
->setFrom(array($_POST['email'] => $_POST['name']))
->setTo(array('[email protected]' => 'John Doe'))->setBody($messageText);
try{
echo($mailer->send($message));
}
catch(Exception $e){
echo($e->getMessage());
}
exit;
}
?>
У кого-нибудь есть идея, где добавить строку?
Вероятно, у вас возникли проблемы с этим из-за этой части вашего кода:
try{
echo($mailer->send($message));
}
catch(Exception $e){
echo($e->getMessage());
}
// This is where you're probably trying to put header()
exit;
Проблема в том, что с помощью echo
PHP автоматически отправляет заголовки в браузер, делая любую другую функцию header
бесполезной, поскольку заголовки уже отправлены вместе с выходом. Из документов:
Помните, что header() должен быть вызван до отправки любого фактического результата либо с помощью обычных тегов HTML, пустых строк в файле, либо из PHP. Очень распространенная ошибка для чтения кода с включением или требованием, функциями или другой функцией доступа к файлам, а также пробелы или пустые строки, которые выводятся перед вызовом header(). Та же проблема существует при использовании одного файла PHP/HTML.
Поэтому вы должны использовать другую стратегию, чтобы передать сообщение пользователю. Вероятно, что-то вроде:
try{
$mailer->send($message);
header('Location: mydesiredpage.php?success=1');
}
catch(Exception $e){
echo($e->getMessage());
}
exit;
Затем проверьте переменную $_GET['success']
на следующей странице, чтобы передать сообщение пользователю.
href
для якорной ссылки, вы должны использовать полностью правильный формат http, если отправляете кого-либо в домен за пределами вашего собственного:header('Location: http://google.com');
Я также напоминаю вам из моего собственного ответа, что вы должны придумать свою собственную стратегию для передачи сообщения обратно пользователю - вы не сможете показать сообщение при использовании перенаправленияheader
.