Перенаправление на страницу успеха с заголовком в Swift Mailer

0

Я хотел бы, чтобы моя форма (на основе 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;
    }

?>

У кого-нибудь есть идея, где добавить строку?

Теги:
header
swiftmailer

1 ответ

0

Вероятно, у вас возникли проблемы с этим из-за этой части вашего кода:

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'] на следующей странице, чтобы передать сообщение пользователю.

  • 0
    Я использовал код сейчас именно так, как вы объяснили. Теперь сообщение все еще отправлено. Но текст "сообщение успешно" не отображается, и вы также не перенаправлены. В принципе для пользователя ничего не происходит. Теперь это код: try {$ mailer-> send ($ message); заголовок ('Location: google.com' ); } catch (Exception $ e) {echo ($ e-> getMessage ()); } Выход; @sjagr
  • 0
    @bobs Аналогично значению href для якорной ссылки, вы должны использовать полностью правильный формат http, если отправляете кого-либо в домен за пределами вашего собственного: header('Location: http://google.com'); Я также напоминаю вам из моего собственного ответа, что вы должны придумать свою собственную стратегию для передачи сообщения обратно пользователю - вы не сможете показать сообщение при использовании перенаправления header .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню