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

Sending HTML form data via E-Mail

I have created a HTML form and want to send its data via email using PHP without the use of outlook etc however, once i have uploaded my site to the server the information isn't sent. Could you please look at my code and advise where i am going wrong please.

<form action="Php/form.php" method="post" name="Contact_Form" >

           <label for="fullname">Full Name: </label> 
           <input type="text" name="Full_Name" id="name"><br>

            <label for="E-Mail">E-Mail: </label>
           <input type="text" name="E-Mail" id="email" ><br>

            <label for="PhoneNumber">Phone Number: </label> 
           <input type="text" name="Phone_Number" id="phonenumber" ><br>

            <label for="Query">Query: </label> 
           <textarea name="Query" rows="4" cols="21" id="query" ></textarea><br>


           <input type="submit" name="submit" value="Send" >

         </form>```

```PHP
<?php
if(isset($_POST['submit'])){
  $emailSubject = 'Website Query';
  $mainEmail = 'r1bos@hotmail.com';

    $nameField = $_POST['Full_Name'];
    $emailField = $_POST['E-Mail'};
    $phoneField = $_POST['Phone_Number'];
    $textField = $_POST ['Query'];

    $body = <<<EOD
<br><hr>
Name: $name <br>
Email: $email <br>
Phone Number: $phone <br>
Query: $text <br>
EOD;

      $headers = "From: $email\r\n";
      $headers .="Content-type: text/html\r\n";  
      $success = mail($mainEmail, $emailSubject, $body, $headers);


          $result = 'Your question has been sent';               
         echo "$result";
 }     
?>```

1 Answer

Brett Atkin
Brett Atkin
2,574 Points

I see a couple things that look off to me.

The value you're setting for the $body variable looks screwy because I've never used the EOD. Have you tried doing something simple like this to as a test?

$body = "This is the body of the email";

Have you tried not assigning a value to $success and just doing this:

mail($mainEmail, $emailSubject, $body, $headers);

You should probably only set the $result variable if mail() succeeds.

if ($success) { $result = 'Your question has been sent';
echo "$result"; }

You might also try echoing out the variables before calling mail() to make sure all the variables are getting set correctly.

I'm no expert, but hope that helps.

Brett