Pett Posted March 4, 2017 Share Posted March 4, 2017 Hello all, I have a PHP contact form that is working fine on localhost. However when I upload it to a liveserver(hostgator) and test it, the user input gets submitted to my email inbox but sends an error message on the browser and refuses to redirect to another page(thank-you page). I am using PHPMailer class to send the form. PHP Form <?php session_start(); //INITIALIZE VARIABLES and set to empty values $name = $phone = $email = $message= $captchaResults= ""; $nameErr = $phoneErr = $emailErr = $checkboxErr= $messageErr= $captchaErr= ""; ini_set('display_errors', 1); error_reporting(E_ALL); if ($_SERVER["REQUEST_METHOD"] == "POST") { $valid = true; //check if name is empty and performs functions in curly brackets if (empty($_POST["name"])) { $valid = false; $nameErr = "Please fill out this field"; } else { //Passes name throught test input function at the bottom of page $name = test_input($_POST["name"]); //remove illegal characters from name , Sanitize data $nm =filter_var($name, FILTER_SANITIZE_STRING); // Validate Data if (!preg_match("/^[a-zA-Z\s,.-]{3,30}$/", $nm)) // Regexp requiring letters, spaces, commas and fullstops and should not exceed 30 letters { $valid = false; $nameErr = "Please don't insert numbers*"; } } //check if phone contains numbers if (empty($_POST["phone"])) { $valid = false; $phoneErr = "Please fill out this field"; } else { $phone = test_input($_POST["phone"]); if (!preg_match("/^[0-9\s(),+.-]*$/", $phone)) { $valid = false; $phoneErr = "Please don't insert letters*"; } } //check if email is valid if (empty($_POST["email"])) { $valid = false; $emailErr = "Please fill out this field"; echo'email is empty<br>'; } else { $email = test_input($_POST["email"]); //Remove all illegal characters from email $em = filter_var($email, FILTER_SANITIZE_EMAIL); if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $em)) { $valid = false; $emailErr = "*Please insert a valid email address*"; } } // Check the values from checkbox and POST them to email $value= ""; // if (empty($_POST["checkbox"])) { $valid = false; $checkboxErr = "Please fill out this field*"; } else{ $checkbox =$_POST["checkbox"]; //Array of values from the checkbox values $value= implode(' , ', $checkbox); //implode values and separate by a comma $value = test_input($value); } //check if message contains letters and white-space if (empty($_POST["message"])) { $valid = false; $messageErr = "Please fill out this field"; echo 'Message is empty<br>'; } else { $message = test_input($_POST["message"]); //remove illegal characters from url $msg =filter_var($message, FILTER_SANITIZE_STRING); if (!preg_match("/^[a-zA-Z\s-,:;`~.?()]*$/", $msg)) //Regexp requiring spaces, full-stops, colon, semi-colons brackets, question marks { $valid = false; $messageErr = "Only letters and spaces are allowed*"; } } //Captcha Results $getRandomNumber1 = $_POST["firstRandomNumber"]; $getRandomNumber2 = $_POST["secondRandomNumber"]; $getCaptchaResults = $_POST["captchaResults"]; $totalNumber= $getRandomNumber1 + $getRandomNumber2; if($totalNumber == $getCaptchaResults){ echo''; } else{$valid = false; $captchaErr="Wrong Answer";} //stores name in a session variable to be used in thank-you page $_SESSION["nm"]= $nm; require ("PHPMailer/PHPMailerAutoload.php"); //including phpmailer class $mail = new PHPMailer(); $mail->IsSMTP(); // set mailer to use SMTP $mail->SMTPDebug = 2; $mail->Host = "gator4261.hostgator.com"; // specify main and backup server, $mail->Port = 465; //Gmail SMTP port $mail->SMTPSecure = "ssl"; // Connect using a TLS connection $mail->SMTPAuth = true; // turn on SMTP authorization $mail->Username = "info@myemailaccount.com"; // SMTP username $mail->Password = "****************"; // SMTP password $mail->From = "$em"; //email of sender $mail->FromName = "$nm"; //name of the sender $mail->AddAddress("info@myemailaccount.com", "Petfar Designers"); //email address of recepient and name $mail->AddReplyTo($em, $nm); //Address to which recepient will reply $mail->WordWrap = 100; // set word wrap to 100 characters $mail->IsHTML(true); // set email format to HTML $mail->Subject = "Contact Form"; //subject of email $mail->Body = "Name: " . $nm . "<br>Phone: " . $phone . "<br>Email: " . $em . "<br>Subject: " . $value . "<br>Message: " . $msg ; //$mailphp = false; if ($valid) { // if (!$mailphp) { if (!$mail->Send()) { echo 'Form could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; exit; } else { header('Location:thank_you.php'); } } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> thank-you form <?php session_start(); ?> <!DOCTYPE html> <html lang= "en-US"> <head> <title> Thank_you_Page </title> </head> <body> <div class="container2"> <br> <br> <div class="thanks"> <b> Hello <i> <?php echo $_SESSION["nm"]; ?> </i> ,Your Contact form was successfully sent! One of our agents will reply to your query as soon as possible. <br> Thank you for choosing us </b> </div> <br> <br> <a href="contact.php"> Go Back </a> </div> </body> </html> Error message on the browser Warning: Cannot modify header information - headers already sent by (output started at /home4/petansk/public_html/PHPMailer/class.smtp.php:234) in /home4/petansk/public_html/contact.php on line 157 Attached is the class.smtp.php in the PHPMailer classclass.smtp.php Link to comment Share on other sites More sharing options...
dsonesuk Posted March 4, 2017 Share Posted March 4, 2017 session_start() should be at the very top, no space, empty line breaks after '<?php', also there should be no html, no space, empty line breaks before '<?php' Link to comment Share on other sites More sharing options...
Pett Posted March 5, 2017 Author Share Posted March 5, 2017 Hello dsonesuk, thanks for your help...I have tried your advice but the error persists, there aint any spaces before opening <?php tag and session PHP form <?php session_start(); //INITIALIZE VARIABLES and set to empty values $name = $phone = $email = $message= $captchaResults= ""; $nameErr = $phoneErr = $emailErr = $checkboxErr= $messageErr= $captchaErr= ""; ini_set('display_errors', 1); error_reporting(E_ALL); if ($_SERVER["REQUEST_METHOD"] == "POST") { $valid = true; //check if name is empty and performs functions in curly brackets if (empty($_POST["name"])) { $valid = false; $nameErr = "Please fill out this field"; } else { //Passes name throught test input function at the bottom of page $name = test_input($_POST["name"]); //remove illegal characters from name , Sanitize data $nm =filter_var($name, FILTER_SANITIZE_STRING); // Validate Data if (!preg_match("/^[a-zA-Z\s,.-]{3,30}$/", $nm)) // Regexp requiring letters, spaces, commas and fullstops and should not exceed 30 letters { $valid = false; $nameErr = "Please don't insert numbers*"; } } //check if phone contains numbers if (empty($_POST["phone"])) { $valid = false; $phoneErr = "Please fill out this field"; } else { $phone = test_input($_POST["phone"]); if (!preg_match("/^[0-9\s(),+.-]*$/", $phone)) { $valid = false; $phoneErr = "Please don't insert letters*"; } } //check if email is valid if (empty($_POST["email"])) { $valid = false; $emailErr = "Please fill out this field"; echo'email is empty<br>'; } else { $email = test_input($_POST["email"]); //Remove all illegal characters from email $em = filter_var($email, FILTER_SANITIZE_EMAIL); if (!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/", $em)) { $valid = false; $emailErr = "*Please insert a valid email address*"; } } // Check the values from checkbox and POST them to email $value= ""; // if (empty($_POST["checkbox"])) { $valid = false; $checkboxErr = "Please fill out this field*"; } else{ $checkbox =$_POST["checkbox"]; //Array of values from the checkbox values $value= implode(' , ', $checkbox); //implode values and separate by a comma $value = test_input($value); } //check if message contains letters and white-space if (empty($_POST["message"])) { $valid = false; $messageErr = "Please fill out this field"; echo 'Message is empty<br>'; } else { $message = test_input($_POST["message"]); //remove illegal characters from url $msg =filter_var($message, FILTER_SANITIZE_STRING); if (!preg_match("/^[a-zA-Z\s-,:;`~.?()]*$/", $msg)) //Regexp requiring spaces, full-stops, colon, semi-colons brackets, question marks { $valid = false; $messageErr = "Only letters and spaces are allowed*"; } } //Captcha Results $getRandomNumber1 = $_POST["firstRandomNumber"]; $getRandomNumber2 = $_POST["secondRandomNumber"]; $getCaptchaResults = $_POST["captchaResults"]; $totalNumber= $getRandomNumber1 + $getRandomNumber2; if($totalNumber == $getCaptchaResults){ echo''; } else{$valid = false; $captchaErr="Wrong Answer";} //stores name in a session variable to be used in thank-you page $_SESSION["nm"]= $nm; require ("PHPMailer/PHPMailerAutoload.php"); //including phpmailer class $mail = new PHPMailer(); $mail->IsSMTP(); // set mailer to use SMTP $mail->SMTPDebug = 2; $mail->Host = "gator4261.hostgator.com"; // specify main and backup server, $mail->Port = 465; //Gmail SMTP port $mail->SMTPSecure = "ssl"; // Connect using a TLS connection $mail->SMTPAuth = true; // turn on SMTP authorization $mail->Username = "info@myemailaccount.com"; // SMTP username $mail->Password = "****************"; // SMTP password $mail->From = "$em"; //email of sender $mail->FromName = "$nm"; //name of the sender $mail->AddAddress("info@myemailaccount.com", "Petfar Designers"); //email address of recepient and name $mail->AddReplyTo($em, $nm); //Address to which recepient will reply $mail->WordWrap = 100; // set word wrap to 100 characters $mail->IsHTML(true); // set email format to HTML $mail->Subject = "Contact Form"; //subject of email $mail->Body = "Name: " . $nm . "<br>Phone: " . $phone . "<br>Email: " . $em . "<br>Subject: " . $value . "<br>Message: " . $msg ; //$mailphp = false; if ($valid) { // if (!$mailphp) { if (!$mail->Send()) { echo 'Form could not be sent.'; echo 'Mailer Error: ' . $mail->ErrorInfo; exit; } else { header('Location:thank_you.php'); } } } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> thank-you page <?php session_start(); ?> <!DOCTYPE html> <html lang= "en-US"> <head> <title> Thank_you_Page </title> </head> <body> <div class="container2"> <br> <br> <div class="thanks"> <b> Hello <i> <?php echo $_SESSION["nm"]; ?> </i> ,Your Contact form was successfully sent! One of our agents will reply to your query as soon as possible. <br> Thank you for choosing us </b> </div> <br> <br> <a href="contact.php"> Go Back </a> </div> </body> </html> Error 2017-03-05 05:15:33 CLIENT -> SERVER: EHLO pwebk.com 2017-03-05 05:15:33 CLIENT -> SERVER: AUTH LOGIN 2017-03-05 05:15:33 CLIENT -> SERVER: aW5mb0Bwd2Viay5jb20= 2017-03-05 05:15:33 CLIENT -> SERVER: RXN0aGVyNzIqMDcyMA== 2017-03-05 05:15:33 CLIENT -> SERVER: MAIL FROM: 2017-03-05 05:15:33 CLIENT -> SERVER: RCPT TO: 2017-03-05 05:15:33 CLIENT -> SERVER: DATA 2017-03-05 05:15:33 CLIENT -> SERVER: Date: Sat, 4 Mar 2017 23:15:32 -0600 2017-03-05 05:15:33 CLIENT -> SERVER: To: Patwan Website Solutions 2017-03-05 05:15:33 CLIENT -> SERVER: From: Martin njoguman 2017-03-05 05:15:33 CLIENT -> SERVER: Reply-To: Martin njoguman 2017-03-05 05:15:33 CLIENT -> SERVER: Subject: Contact Form 2017-03-05 05:15:33 CLIENT -> SERVER: Message-ID: <7bb49a9bd9cf546606a19fd015414116@pwebk.com> 2017-03-05 05:15:33 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.16 (https://github.com/PHPMailer/PHPMailer) 2017-03-05 05:15:33 CLIENT -> SERVER: MIME-Version: 1.0 2017-03-05 05:15:33 CLIENT -> SERVER: Content-Type: text/html; charset=iso-8859-1 2017-03-05 05:15:33 CLIENT -> SERVER: 2017-03-05 05:15:33 CLIENT -> SERVER: Name: Martin njoguman Phone: 123456 Email: mndungu739@gmail.com Subject: Website Design , 2017-03-05 05:15:33 CLIENT -> SERVER: Branding Message: Deqagst 2017-03-05 05:15:33 CLIENT -> SERVER: 2017-03-05 05:15:33 CLIENT -> SERVER: . 2017-03-05 05:15:33 CLIENT -> SERVER: QUIT Warning: Cannot modify header information - headers already sent by (output started at /home4/pwebken/public_html/PHPMailer/class.smtp.php:234) in /home4/pwebken/public_html/contact.php on line 157 Link to comment Share on other sites More sharing options...
Ingolme Posted March 5, 2017 Share Posted March 5, 2017 You're trying to send a header here: header('Location:thank_you.php'); but content has already been output so it's not allowed. The error message tells you exactly where the output started: output started at /home4/pwebken/public_html/PHPMailer/class.smtp.php:234 All of the content you're showing right before the warning is what's giving you that warning. Link to comment Share on other sites More sharing options...
Pett Posted March 5, 2017 Author Share Posted March 5, 2017 Hello ingolme, the content appearing before the warning message appears on the browser when I fill the form and hit the submit button. (You can visit pwebk.com/contact.php) & try it. I get the email in my inbox but it doesn't redirect to (thank_you.php page). ~ Or there could be a syntax error in my code? ~Regards.. Link to comment Share on other sites More sharing options...
Pett Posted March 5, 2017 Author Share Posted March 5, 2017 I tested it on localhost & its working fine & redirects to another page after sending email,,but on a live server it displays an error on the browser Link to comment Share on other sites More sharing options...
dsonesuk Posted March 6, 2017 Share Posted March 6, 2017 When I said at top I meant directly following '<?php' I said there should be no space by adding it as <?php session_start(), you have introduced a space <?php session_start() This bit? require ("PHPMailer/PHPMailerAutoload.php"); Is this the path provided by your provider? OR Is it the path you had on your local server? To PHPmailer Link to comment Share on other sites More sharing options...
Pett Posted March 6, 2017 Author Share Posted March 6, 2017 I have removed spaces and the error is still the same. About PHPMailer path, It is the path I had on my local server. Furthermore, would it really send an email to my email inbox if the path was incorrect? Am getting the email & I just need some help in making it redirect to another page after successful form submission. Link to comment Share on other sites More sharing options...
Ingolme Posted March 6, 2017 Share Posted March 6, 2017 The code seems to be literally printing out the content of the email is sent. This is causing the headers to be sent too early. All this content should not be printed: 2017-03-05 05:15:33 CLIENT -> SERVER: EHLO pwebk.com 2017-03-05 05:15:33 CLIENT -> SERVER: AUTH LOGIN 2017-03-05 05:15:33 CLIENT -> SERVER: aW5mb0Bwd2Viay5jb20= 2017-03-05 05:15:33 CLIENT -> SERVER: RXN0aGVyNzIqMDcyMA== 2017-03-05 05:15:33 CLIENT -> SERVER: MAIL FROM: 2017-03-05 05:15:33 CLIENT -> SERVER: RCPT TO: 2017-03-05 05:15:33 CLIENT -> SERVER: DATA 2017-03-05 05:15:33 CLIENT -> SERVER: Date: Sat, 4 Mar 2017 23:15:32 -0600 2017-03-05 05:15:33 CLIENT -> SERVER: To: Patwan Website Solutions 2017-03-05 05:15:33 CLIENT -> SERVER: From: Martin njoguman 2017-03-05 05:15:33 CLIENT -> SERVER: Reply-To: Martin njoguman 2017-03-05 05:15:33 CLIENT -> SERVER: Subject: Contact Form 2017-03-05 05:15:33 CLIENT -> SERVER: Message-ID: <7bb49a9bd9cf546606a19fd015414116@pwebk.com> 2017-03-05 05:15:33 CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.16 (https://github.com/PHPMailer/PHPMailer) 2017-03-05 05:15:33 CLIENT -> SERVER: MIME-Version: 1.0 2017-03-05 05:15:33 CLIENT -> SERVER: Content-Type: text/html; charset=iso-8859-1 2017-03-05 05:15:33 CLIENT -> SERVER: 2017-03-05 05:15:33 CLIENT -> SERVER: Name: Martin njoguman Phone: 123456 Email: mndungu739@gmail.com Subject: Website Design , 2017-03-05 05:15:33 CLIENT -> SERVER: Branding Message: Deqagst 2017-03-05 05:15:33 CLIENT -> SERVER: 2017-03-05 05:15:33 CLIENT -> SERVER: . 2017-03-05 05:15:33 CLIENT -> SERVER: QUIT You have to find out what's printing that and stop it. Link to comment Share on other sites More sharing options...
dsonesuk Posted March 6, 2017 Share Posted March 6, 2017 Ha, just seen it! couldn't see wood through trees $mail->SMTPDebug = 2; IS as it suggests is debugger and at the moment it is on, comment it out or set value to 0; Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now