2016-08-10 3 views
1

Прочтите это перед тем, как поставить этот вопрос как дубликат.PHP form redirect Ошибка

Моя ошибка с командой заголовка, она не позволяет моей форме перенаправлять, она запускает форму после отправки и не отправляет меня на страницу. Я не очень хороший кодер, и сейчас я очень потерялся.

Мой фон в дизайне, и мой последний вопрос был отмечен как дубликат из-за моего отсутствия объяснения. Пожалуйста, поймите, что любое неправильное общение не предназначено, и я был на этом сайте часами, читая все остальные вопросы и никуда не денусь, поэтому любая помощь по этому вопросу, которую можно было бы выразить более просто, будет оценена по достоинству.

Я добавил свой код ниже, и он содержит команду header() и как я ее включил. Dreamweaver не показывает ошибок кода, но страница отказывается перенаправлять URL-адрес после правильной отправки.

<!DOCTYPE html> 
 
<html lang="en"> 
 
    <head> 
 
     <meta charset="utf-8"> 
 
     <meta name="apple-mobile-web-app-capable" content="yes" /> 
 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
 
     <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 
 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
 
     <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 
 
     <link rel="shortcut icon" href="startup/flat-ui/images/favicon.ico"> 
 
     
 
     <link rel="stylesheet" href="startup/flat-ui/bootstrap/css/bootstrap.css"> 
 
     <link rel="stylesheet" href="startup/flat-ui/css/flat-ui.css"> 
 
     <!-- Using only with Flat-UI (free)--> 
 
     <link rel="stylesheet" href="startup/common-files/css/icon-font.css"> 
 
     <!-- end --> 
 
     <link rel="stylesheet" href="startup/common-files/css/animations.css"> 
 
     <link rel="stylesheet" href="static/css/style.css"> 
 
     
 
     <title></title> 
 
    </head> 
 

 
    <body> 
 
     <div class="page-wrapper"> 
 
<section id="contactform" class="contacts-1"> 
 
    <div class="container"> 
 
     <div class="row"> 
 
      <div class="col-sm-8"> 
 
       <h3>Step 1: Information Form</h3> 
 
      </div> 
 
     </div> 
 
     <div class="row"> 
 
      <div class="col-sm-8"> 
 
      \t <?php 
 
          if($_SERVER['REQUEST_METHOD'] == "POST") { 
 
          // Form variables 
 
          // req: name, ship, ctname, ctnum, email 
 
\t \t \t \t \t \t \t $goto_after_mail = "http://www.website.com/step2.html"; 
 
\t \t \t \t \t \t \t $formName = filter_var($_POST['formName'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t $formShip = filter_var($_POST['formShip'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t $formCity = filter_var($_POST['formCity'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t $formState = filter_var($_POST['formState'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t $formZip = filter_var($_POST['formZip'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t $formCtname = filter_var($_POST['formCtname'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t $formCtnum = filter_var($_POST['formCtnum'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t $formEmail = filter_var($_POST['formEmail'], FILTER_SANITIZE_STRING); 
 
\t \t \t \t \t \t \t 
 
          // CAPTCHA 
 
          require_once('captcha/recaptchalib.php'); 
 
          $privatekey = ""; 
 
          $resp = recaptcha_check_answer(
 
          $privatekey, 
 
          $_SERVER["REMOTE_ADDR"], 
 
          $_POST["recaptcha_challenge_field"], 
 
          $_POST["recaptcha_response_field"] 
 
          ); 
 
          // Form validation 
 
          $nameError = $formName == ""; 
 
          $shipError = $formShip == ""; 
 
\t \t \t \t \t \t \t $cityError = $formCity == ""; 
 
\t \t \t \t \t \t \t $stateError = $formState == ""; 
 
\t \t \t \t \t \t \t $zipError = $formZip == ""; 
 
          $ctnameError = $formCtname == ""; 
 
          $ctnumError = $formCtnum == ""; 
 
\t \t \t \t \t \t \t $emailError = $formEmail == ""; 
 
\t \t \t \t \t \t \t 
 
          $captchaError = !($resp->is_valid); 
 
          $hasError = $nameError || $shipError || $cityError || $stateError || $zipError || $ctnameError || $ctnumError || $emailError ; 
 
          if(!$hasError && !$captchaError) { 
 
          $headers = 'From: '.$formName.' <'.$formEmail.'>' . "\r\n"; 
 
          $headers .= 'Reply-To: ' . $formEmail . "\r\n"; 
 
          $headers .= 'Return-Path: ' . $formEmail . "\r\n"; 
 
          $headers .= 'MIME-Version: 1.0' . "\r\n"; 
 
          $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
 
          $body = 
 
          " 
 
\t \t \t \t \t \t \t <p><b>Company Name: </b>$formName</p> 
 
\t \t \t \t \t \t \t <p><b>Pickup Address: </b>$formShip</p> 
 
\t \t \t \t \t \t \t <p><b>Pickup City: </b>$formCity</p> 
 
\t \t \t \t \t \t \t <p><b>Pickup State: </b>$formState</p> 
 
\t \t \t \t \t \t \t <p><b>Pickup Zip: </b>$formZip</p> 
 
\t \t \t \t \t \t \t <p><b>Contact Name: </b>$formCtname</p> 
 
\t \t \t \t \t \t \t <p><b>Contact Phone: </b>$formCtnum</p> 
 
\t \t \t \t \t \t \t <p><b>Contact Email: </b>$formEmail</p><br> 
 
\t \t \t \t \t \t \t 
 
\t \t \t \t \t \t \t "; 
 
          mail(
 
          "[email protected]", 
 
          "A new request from website.com!", 
 
          $body, 
 
          $headers 
 
          ); 
 
          header("location: ".$goto_after_mail); 
 
          } else { 
 
          echo "<p>There was an error submitting the form. Please check all the marked fields.</p>"; 
 
          if ($captchaError) { 
 
          echo "<p>Captcha error. Please type the checkwords again.</p>"; 
 
          } 
 
          } 
 
          } 
 
          ?> 
 
         <script type="text/javascript"> 
 
         var RecaptchaOptions = { 
 
         theme : 'clean' 
 
         }; 
 
         </script>  
 
       <div class="col-sm-12"> 
 
          <form id="contactForm" action="" method="post"> 
 
           <div class="control-group<?php if ($nameError) echo " error"; ?>"> 
 
            <label class="control-label" for="formName"><strong>Company Name</strong></label> 
 
            <div class="controls"> 
 
            \t <input type="text" name="formName" value="<?php echo $formName; ?>"> 
 
            </div> 
 
           </div> 
 
           <div class="control-group<?php if ($shipError) echo " error"; ?>"> 
 
            <label class="control-label" for="formShip"><strong>Address for Pickup</strong></label> 
 
            <div class="controls"> 
 
            \t <input type="text" name="formShip" value="<?php echo $formShip; ?>"> 
 
            </div> 
 
           </div> 
 
           <div class="col-sm-4"> 
 
           \t <div class="control-group<?php if ($cityError) echo " error"; ?>"> 
 
            \t <label class="control-label" for="formCity"><strong>City</strong></label> 
 
            \t <div class="controls"> 
 
            \t \t <input type="text" name="formCity" value="<?php echo $formCity; ?>"> 
 
            \t </div> 
 
           \t </div> 
 
           </div> 
 
           <div class="col-sm-4"> 
 
           \t <div class="control-group<?php if ($stateError) echo " error"; ?>"> 
 
            \t <label class="control-label" for="formState"><strong>State</strong></label> 
 
            \t <div class="controls"> 
 
            \t \t <input type="text" name="formState" value="<?php echo $formState; ?>"> 
 
            \t </div> 
 
           \t </div> 
 
           </div> 
 
           <div class="col-sm-4"> 
 
           \t <div class="control-group<?php if ($zipError) echo " error"; ?>"> 
 
            \t <label class="control-label" for="formZip"><strong>Zip</strong></label> 
 
            \t <div class="controls"> 
 
            \t \t <input type="text" name="formZip" value="<?php echo $formZip; ?>"> 
 
            \t </div> 
 
           \t </div> 
 
           </div> 
 
           <div class="control-group<?php if ($ctnameError) echo " error"; ?>"> 
 
            <label class="control-label" for="formCtname"><strong>Contact Name</strong></label> 
 
            <div class="controls"> 
 
            \t <input type="text" name="formCtname" value="<?php echo $formCtname; ?>"> 
 
            </div> 
 
           </div> 
 
           <div class="control-group<?php if ($ctnumError) echo " error"; ?>"> 
 
            <label class="control-label" for="formCtnum"><strong>Contact Number</strong></label> 
 
            <div class="controls"> 
 
            \t <input type="text" name="formCtnum" value="<?php echo $formCtnum; ?>"> 
 
            </div> 
 
           </div> 
 
           <div class="control-group<?php if ($emailError) echo " error"; ?>"> 
 
            <label class="control-label" for="formEmail"><strong>Contact Email</strong></label> 
 
            <div class="controls"> 
 
            \t <input type="email" name="formEmail" value="<?php echo $formEmail; ?>"> 
 
            </div> 
 
           </div> 
 
           <br> 
 
           
 
           
 
           <div class="control-group"> 
 
            <div class="controls"> 
 
\t \t \t \t \t \t \t \t \t \t <?php 
 
             // load recaptcha file 
 
             require_once('captcha/recaptchalib.php'); 
 
             // enter your public key 
 
             $publickey = ""; 
 
             // display recaptcha test fields 
 
             echo recaptcha_get_html($publickey); 
 
             ?> 
 
            </div> 
 
           </div> 
 
           <div class="control-group"> 
 
            <div class="controls"> 
 
             <br /> 
 
             <input type="submit" class="btn btn-info" value="Go To Step 2" tabindex="5" id="submit" name="submit"> 
 
             
 
             <a href="step2.html">Click Here to go to Step 2</a> 
 
            </div> 
 
           </div> 
 
         \t </form> 
 
        </div> 
 
      </div> 
 
     </div> 
 
    </div> 
 
</section>

+0

эй, добро пожаловать в СО. См. Http://stackoverflow.com/help/mcve и создайте минимальный полный и проверенный пример вашей проблемы. –

ответ

2

Вы не можете отправить заголовки после того, как ответ был отправлен клиенту. Переместите ваш php-код перед любым контентом на вашей странице (в основном в вашем случае перед объявлением doctype).

Выдержка из официального PHP инструкции относительно header():

Помните, что заголовок() должен вызываться перед любым фактическим выходом , необходимо либо с помощью обычных HTML-тегов, пустых строк в файл, или из PHP. Это очень распространенная ошибка для чтения кода с включением или требованием, функциями или другой функцией доступа к файлам, а также пробелов или пустых строк , которые выводятся перед вызовом header(). Та же проблема существует при использовании одного файла PHP/HTML.

+0

Я переместил весь основной скрипт PHP над HTML, но произошло то же самое, форма просто перезагрузилась со всеми ответами на месте – graphicdesigner88

+0

@ graphicdesigner88 Я обновил свой ответ. Пожалуйста, переместите его перед объявлением doctype. Я отвечал с телефона и не обращал внимания на то, что перед тегом открытия html есть doctype. –

+0

Я сделал это изменение, но произошла такая же ошибка. Я решил переместить весь код обратно и создать и Echo, который сообщает им, что форма отправлена, и щелкнуть и перейти на следующую страницу. Мне придется потратить больше времени, чем у меня на этом – graphicdesigner88

0

Если вы хотите использовать header('Location:...') то это должно быть первое, что вы посылаете в браузер, если вообще что-либо отправляется в браузер ваш редирект не будет работать. Это включает в себя любые заголовки http.

Так что переместите свой код для отправки электронной почты, отправляющего перенаправление на самую вершину вашего скрипта.

Обязательно вы отправляете ничего в браузер перед перенаправлением, включая заголовки, добавьте ob_start() в начало вашего скрипта и ob_end_flush() до конца. Это включит буферизацию вывода, что означает, что все выходные данные будут буферизованы и не отправлены в браузер до тех пор, пока он не достигнет вашего перенаправления или ob_end_flush. Вам необходимо убедиться, что вы очистили буфер до перенаправления и вышли из сценария после перенаправления.

<?php 
    ob_start(); 
    if($_SERVER['REQUEST_METHOD'] == "POST") { 
    // Form variables 
    // req: name, ship, ctname, ctnum, email 
    $goto_after_mail = "http://www.website.com/step2.html"; 
    $formName = filter_var($_POST['formName'], FILTER_SANITIZE_STRING); 
    $formShip = filter_var($_POST['formShip'], FILTER_SANITIZE_STRING); 
    $formCity = filter_var($_POST['formCity'], FILTER_SANITIZE_STRING); 
    $formState = filter_var($_POST['formState'], FILTER_SANITIZE_STRING); 
    $formZip = filter_var($_POST['formZip'], FILTER_SANITIZE_STRING); 
    $formCtname = filter_var($_POST['formCtname'], FILTER_SANITIZE_STRING); 
    $formCtnum = filter_var($_POST['formCtnum'], FILTER_SANITIZE_STRING); 
    $formEmail = filter_var($_POST['formEmail'], FILTER_SANITIZE_STRING); 

    // CAPTCHA 
    require_once('captcha/recaptchalib.php'); 
    $privatekey = ""; 
    $resp = recaptcha_check_answer(
    $privatekey, 
    $_SERVER["REMOTE_ADDR"], 
    $_POST["recaptcha_challenge_field"], 
    $_POST["recaptcha_response_field"] 
    ); 
    // Form validation 
    $nameError = $formName == ""; 
    $shipError = $formShip == ""; 
    $cityError = $formCity == ""; 
    $stateError = $formState == ""; 
    $zipError = $formZip == ""; 
    $ctnameError = $formCtname == ""; 
    $ctnumError = $formCtnum == ""; 
    $emailError = $formEmail == ""; 

    $captchaError = !($resp->is_valid); 
    $hasError = $nameError || $shipError || $cityError || $stateError || $zipError || $ctnameError || $ctnumError || $emailError ; 
    if(!$hasError && !$captchaError) { 
    $headers = 'From: '.$formName.' <'.$formEmail.'>' . "\r\n"; 
    $headers .= 'Reply-To: ' . $formEmail . "\r\n"; 
    $headers .= 'Return-Path: ' . $formEmail . "\r\n"; 
    $headers .= 'MIME-Version: 1.0' . "\r\n"; 
    $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
    $body = 
    " 
    <p><b>Company Name: </b>$formName</p> 
    <p><b>Pickup Address: </b>$formShip</p> 
    <p><b>Pickup City: </b>$formCity</p> 
    <p><b>Pickup State: </b>$formState</p> 
    <p><b>Pickup Zip: </b>$formZip</p> 
    <p><b>Contact Name: </b>$formCtname</p> 
    <p><b>Contact Phone: </b>$formCtnum</p> 
    <p><b>Contact Email: </b>$formEmail</p><br> 

    "; 
    mail(
    "[email protected]", 
    "A new request from website.com!", 
    $body, 
    $headers 
    ); 
    ob_end_clean(); 
    header("location: ".$goto_after_mail); 
    exit; 
    } else { 
    echo "<p>There was an error submitting the form. Please check all the marked fields.</p>"; 
    if ($captchaError) { 
    echo "<p>Captcha error. Please type the checkwords again.</p>"; 
    } 
    } 
    } 
?> 





<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <meta name="apple-mobile-web-app-capable" content="yes" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
     <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> 
     <meta name="apple-mobile-web-app-status-bar-style" content="black" /> 
     <link rel="shortcut icon" href="startup/flat-ui/images/favicon.ico"> 

     <link rel="stylesheet" href="startup/flat-ui/bootstrap/css/bootstrap.css"> 
     <link rel="stylesheet" href="startup/flat-ui/css/flat-ui.css"> 
     <!-- Using only with Flat-UI (free)--> 
     <link rel="stylesheet" href="startup/common-files/css/icon-font.css"> 
     <!-- end --> 
     <link rel="stylesheet" href="startup/common-files/css/animations.css"> 
     <link rel="stylesheet" href="static/css/style.css"> 

     <title></title> 
    </head> 

    <body> 
     <div class="page-wrapper"> 
<section id="contactform" class="contacts-1"> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-sm-8"> 
       <h3>Step 1: Information Form</h3> 
      </div> 
     </div> 
     <div class="row"> 
      <div class="col-sm-8"> 

         <script type="text/javascript"> 
         var RecaptchaOptions = { 
         theme : 'clean' 
         }; 
         </script>  
       <div class="col-sm-12"> 
          <form id="contactForm" action="" method="post"> 
           <div class="control-group<?php if ($nameError) echo " error"; ?>"> 
            <label class="control-label" for="formName"><strong>Company Name</strong></label> 
            <div class="controls"> 
             <input type="text" name="formName" value="<?php echo $formName; ?>"> 
            </div> 
           </div> 
           <div class="control-group<?php if ($shipError) echo " error"; ?>"> 
            <label class="control-label" for="formShip"><strong>Address for Pickup</strong></label> 
            <div class="controls"> 
             <input type="text" name="formShip" value="<?php echo $formShip; ?>"> 
            </div> 
           </div> 
           <div class="col-sm-4"> 
            <div class="control-group<?php if ($cityError) echo " error"; ?>"> 
             <label class="control-label" for="formCity"><strong>City</strong></label> 
             <div class="controls"> 
              <input type="text" name="formCity" value="<?php echo $formCity; ?>"> 
             </div> 
            </div> 
           </div> 
           <div class="col-sm-4"> 
            <div class="control-group<?php if ($stateError) echo " error"; ?>"> 
             <label class="control-label" for="formState"><strong>State</strong></label> 
             <div class="controls"> 
              <input type="text" name="formState" value="<?php echo $formState; ?>"> 
             </div> 
            </div> 
           </div> 
           <div class="col-sm-4"> 
            <div class="control-group<?php if ($zipError) echo " error"; ?>"> 
             <label class="control-label" for="formZip"><strong>Zip</strong></label> 
             <div class="controls"> 
              <input type="text" name="formZip" value="<?php echo $formZip; ?>"> 
             </div> 
            </div> 
           </div> 
           <div class="control-group<?php if ($ctnameError) echo " error"; ?>"> 
            <label class="control-label" for="formCtname"><strong>Contact Name</strong></label> 
            <div class="controls"> 
             <input type="text" name="formCtname" value="<?php echo $formCtname; ?>"> 
            </div> 
           </div> 
           <div class="control-group<?php if ($ctnumError) echo " error"; ?>"> 
            <label class="control-label" for="formCtnum"><strong>Contact Number</strong></label> 
            <div class="controls"> 
             <input type="text" name="formCtnum" value="<?php echo $formCtnum; ?>"> 
            </div> 
           </div> 
           <div class="control-group<?php if ($emailError) echo " error"; ?>"> 
            <label class="control-label" for="formEmail"><strong>Contact Email</strong></label> 
            <div class="controls"> 
             <input type="email" name="formEmail" value="<?php echo $formEmail; ?>"> 
            </div> 
           </div> 
           <br> 


           <div class="control-group"> 
            <div class="controls"> 
             <?php 
             // load recaptcha file 
             require_once('captcha/recaptchalib.php'); 
             // enter your public key 
             $publickey = ""; 
             // display recaptcha test fields 
             echo recaptcha_get_html($publickey); 
             ?> 
            </div> 
           </div> 
           <div class="control-group"> 
            <div class="controls"> 
             <br /> 
             <input type="submit" class="btn btn-info" value="Go To Step 2" tabindex="5" id="submit" name="submit"> 

             <a href="step2.html">Click Here to go to Step 2</a> 
            </div> 
           </div> 
          </form> 
        </div> 
      </div> 
     </div> 
    </div> 
</section> 

<?php ob_end_flush(); ?>