Sendmail.php Error

PHP programming forum. Ask questions or help people concerning PHP code. Don't understand a function? Need help implementing a class? Don't understand a class? Here is where to ask. Remember to do your homework!

Moderator: General Moderators

Post Reply
raw100
Forum Newbie
Posts: 4
Joined: Thu Jun 30, 2011 11:55 pm

Sendmail.php Error

Post by raw100 »

Hi:
I am new and i have searched the forum for the kind of issue that i have but could not find it, so i am posting it for assistance. But if the same have been posted, accept my apologies.

I have a contact form that uses sendmail.php. The form sends the message to me, but does not redirect user to a thank you page on the site. Instead, it spew out:

Warning: Cannot modify header information - headers already sent by (output started at /home/username/public_html/sendmail.php:1) in /home/username/public_html/sendmail.php on line 90.

Below is the sendmail.php code:


<?php
if(isset($_POST['email'])) {

// EDIT THE 2 LINES BELOW AS REQUIRED

$email_to = "owner@sitename.com";
$email_subject = "Hello";


function died($error)
{

// your error code can go here

echo "We are very sorry, but there were error(s) found with the form you submitted. ";
echo "These errors appear below.<br /><br />";
echo $error."<br /><br />";
echo "Please go back and fix these errors.<br /><br />";
die();

}


// validation expected data exists

echo "name=>".$_POST["name"] . "<br/>";
echo "phone=>".$_POST["phone"] . "<br/>";
echo "email=>".$_POST["email"] . "<br/>";
echo "best_time_to_contact=>".$_POST["best_time_to_contact"] . "<br/>";
echo "Treatment=>".$_POST["Treatment"] . "<br/>";
echo "comments=>".$_POST["comments"] . "<br/>";


if( $_POST["name"] == "" || $_POST['phone'] == "" || $_POST['email'] == "" ||
$_POST['best_time_to_contact'] == "" || $_POST['Treatment'] == "" || $_POST['comments'] == "" )
{
//died('We are sorry, but there appears to be a problem with the form you submitted.');
died('Data empty');
}


$name = $_POST['name']; // required
$phone = $_POST['phone']; // required
$email_from = $_POST['email']; // required
$best_time_to_contact = $_POST['best_time_to_contact']; // required
$treatments = $_POST['Treatment']; // not required
$comments = $_POST['comments']; // required

$error_message = "";
$email_exp = "^[A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$";

if(!eregi($email_exp,$email_from))
$error_message .= 'The Email Address you entered does not appear to be valid.<br />';

$string_exp = "^[a-z .'-]+$";
if(!eregi($string_exp,$name))
$error_message .= 'The Name you entered does not appear to be valid.<br />';


// if(strlen($website) < 2)
// $error_message .= 'The website you entered do not appear to be valid.<br />';

if(strlen($error_message) > 0)
died($error_message);

$email_message = "Form details below.\n\n";

function clean_string($string)
{
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}



$email_message .= " Name: ".clean_string($name)."\n";
$email_message .= "Phone: ".clean_string($phone)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "Best time to contact: ".clean_string($best_time_to_contact)."\n";
$email_message .= "Treatments: ".clean_string($treatments)."\n";
$email_message .= "Comments: ".clean_string($comments)."\n";

// create email headers

$headers = 'From: '.$email_from."\r\n"
.'Reply-To: '.$email_from."\r\n"
.'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);

header("location: http://www.sitename.com/thank-you.html");
?>
<?php

}

?>

Thanks
User avatar
twinedev
Forum Regular
Posts: 984
Joined: Tue Sep 28, 2010 11:41 am
Location: Columbus, Ohio

Re: Sendmail.php Error

Post by twinedev »

Make sure that there is nothing before the opening <?php tag on the page.

The message you are getting is because PHP already send data to the browser before the header line is called. (Headers have to be sent before any content). It has been a while since I have encountered this error (and paid attention to what it said other than realizing I goofed), but believe the :1 indicates line 1 is where some output was sent to the browser, so usually that is from the opening tag not being the first characters in the file.

-Greg

PS. For better posts next time, use the PHP Code button in the editor to wrap your code with.
raw100
Forum Newbie
Posts: 4
Joined: Thu Jun 30, 2011 11:55 pm

Re: Sendmail.php Error

Post by raw100 »

Could you explain "that is from the opening tag not being the first characters in the file." And if possible assist with how to rearrange the code? Thanks
User avatar
Jade
Forum Regular
Posts: 908
Joined: Sun Dec 29, 2002 5:40 pm
Location: VA

Re: Sendmail.php Error

Post by Jade »

Essentially make sure the first thing at the top of your file is <?php. No spaces or characters should appear before that. If you're still getting an error it's because your died() function is being displaying something to the screen before you're trying to redirect the user to a new page.
raw100
Forum Newbie
Posts: 4
Joined: Thu Jun 30, 2011 11:55 pm

Re: Sendmail.php Error

Post by raw100 »

Jade wrote:Essentially make sure the first thing at the top of your file is <?php. No spaces or characters should appear before that. If you're still getting an error it's because your died() function is being displaying something to the screen before you're trying to redirect the user to a new page.
There is no space or anything before the <?php. andi believe the died() function is ok.
User avatar
Apollo
Forum Regular
Posts: 794
Joined: Wed Apr 30, 2008 2:34 am

Re: Sendmail.php Error

Post by Apollo »

raw100 wrote:
Jade wrote:Essentially make sure the first thing at the top of your file is <?php. No spaces or characters should appear before that. If you're still getting an error it's because your died() function is being displaying something to the screen before you're trying to redirect the user to a new page.
There is no space or anything before the <?php. andi believe the died() function is ok.
Before the header(..) line, insert a line containing this:

Code: Select all

die("what's before this?")
Visit the page again, right click -> view source, preferably in a hex editor, then what's before "what's before this?" ?
An empty line perhaps? A tab character maybe? A null byte?
raw100
Forum Newbie
Posts: 4
Joined: Thu Jun 30, 2011 11:55 pm

Re: Sendmail.php Error

Post by raw100 »

Apollo wrote:
raw100 wrote:
Jade wrote:Essentially make sure the first thing at the top of your file is <?php. No spaces or characters should appear before that. If you're still getting an error it's because your died() function is being displaying something to the screen before you're trying to redirect the user to a new page.
There is no space or anything before the <?php. andi believe the died() function is ok.
Before the header(..) line, insert a line containing this:

Code: Select all

die("what's before this?")
Visit the page again, right click -> view source, preferably in a hex editor, then what's before "what's before this?" ?
An empty line perhaps? A tab character maybe? A null byte?
On what page? The contact form page ? If that is it, there is nothing like that on it. Thanks
User avatar
Apollo
Forum Regular
Posts: 794
Joined: Wed Apr 30, 2008 2:34 am

Re: Sendmail.php Error

Post by Apollo »

raw100 wrote:On what page? The contact form page ? If that is it, there is nothing like that on it. Thanks
On the page that previously gave you the "Warning: Cannot modify header information" warning.
Post Reply