Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

PHP Building Websites with PHP Contact Form & Sending Email Sending Our Email

Stuart McPherson
Stuart McPherson
15,939 Points

Site won't redirect after submitting form

After entering from details and submitting the contact page refreshes and doesn't redirect to the other page

Index.php
<?php

require __DIR__ . '/vendor/autoload.php';

date_default_timezone_set ('Europe/London');

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

//$log = new Monolog\Logger('name');
//$log->pushHandler(new Monolog\Handler\StreamHandler('app.txt', Monolog\Logger::WARNING));
//$log->addWarning('Warning');

$app = new \Slim\Slim(array(
    'view' => new \Slim\Views\Twig()
));

$view = $app->view();
$view->parserOptions = array(
    'debug' => true
);

$view->parserExtensions = array(
    new \Slim\Views\TwigExtension(),
);

$app->get('/', function() use($app){
  $app->render('index.twig');
})->name('home');

$app->get('/contact', function() use($app){
  $app->render('contact.twig');
})->name('contact');;

$app->post('/contact', function() use($app){
  $name = $app->request->post('name');
  $email = $app->request->post('email');
  $msg = $app->request->post('msg');

  if(!empty($name) && !empty($email) && !empty($msg)) {
    $cleanName = filter_var($name, FILTER_SANITIZE_STRING);
    $cleanEmail = filter_var($email, FILTER_SANITIZE_EMAIL);
    $cleanMsg = filter_var($msg, FILTER_SANITIZE_STRING);
  } else {
    //message the user that there was a problem
    $app->redirect('/contact');
  }

  $transport = swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
  $mailer = \Swift_Mailer::newInstance($transport);

  $message = \Swift_Message::newInstance();
  $message->setSubject('Email from our website');
  $message->setFrom(array($cleanEmail => $cleanName));

  $message->setTo(array('treehouse@localhost'));
  $message->setBody($cleanMsg);

  $result = $mailer->send($message);

  if($result > 0) {
    // send thank you message
    $app->redirect('/');

  } else {
    // send a message to the user that the message failed ot send
    // log the error
    $app->redirect('/contact');
  }

});

$app->run();

Downloaded the index.php file from the lesson and put that in, still doesn't work

2 Answers

Stuart McPherson
Stuart McPherson
15,939 Points

figured it out

 $transport = swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
 $mailer = \Swift_Mailer::newInstance($transport);

should be

 $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs');
 $mailer = \Swift_Mailer::newInstance($transport);

It seems you're missing the path to the page you want the browser to go to after the form is submitted in the if statement towards the end of your code.

<?php
if($result > 0) {
    // send thank you message
    $app->redirect('/SOMEPAGE');

  } else {
    // send a message to the user that the message failed ot send
    // log the error
    $app->redirect('/contact');
  }
?>
Stuart McPherson
Stuart McPherson
15,939 Points

Thanks for getting back to me on this. I want it to go back to the index.twig page which I though I set the url up as '/' ?