Page 1 of 1

Sendmail.php Error

Posted: Fri Jul 01, 2011 12:08 am
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

Re: Sendmail.php Error

Posted: Fri Jul 01, 2011 12:56 am
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.

Re: Sendmail.php Error

Posted: Fri Jul 01, 2011 7:26 am
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

Re: Sendmail.php Error

Posted: Fri Jul 01, 2011 2:14 pm
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.

Re: Sendmail.php Error

Posted: Fri Jul 01, 2011 3:15 pm
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.

Re: Sendmail.php Error

Posted: Fri Jul 01, 2011 4:15 pm
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?

Re: Sendmail.php Error

Posted: Fri Jul 01, 2011 5:03 pm
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

Re: Sendmail.php Error

Posted: Sat Jul 02, 2011 3:00 am
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.