2017-03-06 87 views
1

我有一個在本地主機上正常工作的PHP聯繫表(發送郵件到我的收件箱並重定向到另一頁)。但是,當我將其上傳到Liveserver並對其進行測試時,用戶輸入會被提交到我的電子郵件收件箱,但在瀏覽器上顯示輸入內容,並且不會重定向到其他頁面(感謝頁面)。我正在使用PHPMailer類發送表單。PHP發送電子郵件後拒絕重定向

PHP形式

<?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 = "[email protected]"; // SMTP username 
    $mail->Password = "****************";   // SMTP password 

    $mail->From = "$em";       //email of sender 
    $mail->FromName = "$nm";      //name of the sender 
    $mail->AddAddress("[email protected]", "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; 
} 

?> 

感謝頁面

<?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> 

錯誤消息

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 
+1

可能重複的[如何解決]已經發送的頭文件「PHP中的錯誤」(http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php) – Psi

+0

看起來像這樣:http://stackoverflow.com/a/8677936/1886270 –

+0

在頁面頂部添加'ob_start();' –

回答

0

您可以送花兒給人s使用headers_sent()來探測是否仍然可以發送標題。這有助於有條件地打印任何信息或應用回退邏輯。

if (headers_sent()) { 
    die(file_get_contents("thank_you.php")); 
} 
else{ 
    exit(header("Location: /user.php")); 
} 
0

而不是使用頭header('Location:thank_you.php'); 使用echo '<script>location.replace("thank_you.php");</script>';

希望它能幫助的!