2011-08-01 11 views
1

フォームを正しく送信した後、人々をPDFにリダイレクトしようとしています。これを行う前にフォームフィールドをチェックして正しく記入されているようにします今、私はリダイレクトを行うためにheader()を使用しようとしていましたが、エラーが出る前に何回もエコーしていたからです。以下は私のコードですが、私は何ができますか?リンクはPDFファイルが含まれているので、私は最後に、それはjavascriptのビットで動作するようにPHPがフォームを送信した後にリダイレクトする

if(($valid_fname == "Y")&&($valid_sname == "Y")&&($valid_company == "Y")&&($valid_email == "Y")) { 
     echo "<p class=\"secText\">Thank you for confirming your details, you will be re-directed to \"The Personal Touch\" Whitepaper shortly.</p>\n"; 
     echo "<script type=\"text/javascript\">\n"; 
     echo " <!--\n"; 
     echo "  setTimeout(\"window.location = 'http://www.sefasinnovation.co.uk/personal_touch.pdf';\",5000);\n"; 
     echo "//-->\n"; 
     echo "</script>\n"; 
    } 
+2

ブール値の使い方を教えてください。どうぞ、どうぞ、否定比較の方法を教えてください。 'if(!$ valid_compay)echo 'と入力してください。' 'ははるかに短く読みやすくなりました! – gnur

答えて

1

output bufferingを使用すると、ヘッダーが送信された後にのみコンテンツを送信できます。

if(($valid_fname == "Y")&&($valid_sname == "Y")&&($valid_company == "Y")&&($valid_email == "Y")) { 
    ob_start(); 
    echo "<p class=\"secText\">Thank you for confirming your details, you will be re-directed to \"The Personal Touch\" Whitepaper shortly.</p>\n";   
    header('Location: http://www.sefasinnovation.co.uk/personal_touch.pdf'); 
    ob_end_flush(); 
    exit(); 
} 

しかし、リダイレクトが行われる前にメッセージを表示する時間が実質的にないので、この方法は役に立たないでしょう。

あなたの最善のアプローチは、特定の時間が経過した後にJavaScriptリダイレクトをトリガーする小さなHTMLページにページをリダイレクトすることです。ここに一般的な考えがあります。詳細を並べ替える必要があります。

PHP notification.html

if(($valid_fname == "Y")&&($valid_sname == "Y")&&($valid_company == "Y")&&($valid_email == "Y")) { 
    header('Location: http://www.sefasinnovation.co.uk/notification.html'); 
    exit(); 

    // You could also avoid redirection to an HTML file and output the code directly 
    echo <<<HTML 
    <html> 
     <head> 
     <title>Enter desired title</title> 
     <script type="text/javascript"> 
      setTimeout(function(){ 
       window.location = "http://www.sefasinnovation.co.uk/personal_touch.pdf"; 
      }, 5000); 
     </script> 
     </head> 
     <body> 
      <p class="secText">Thank you for confirming your details, you will be re-directed to "The Personal Touch" Whitepaper shortly.</p> 
      <p>If this page isn't redirected in 5 seconds please click <a href="http://www.sefasinnovation.co.uk/personal_touch.pdf">here</a>.</p> 
     </body> 
    </html> 
HTML; 
} 

(上記のPHPコードも出てこのコードを吐くことができますが、前ページの出力がなかった場合のみ)

<html> 
    <head> 
    <title>Enter desired title</title> 
    <script type="text/javascript"> 
     setTimeout(function(){ 
      window.location = "http://www.sefasinnovation.co.uk/personal_touch.pdf"; 
     }, 5000); 
    </script> 
    </head> 
    <body> 
     <p class="secText">Thank you for confirming your details, you will be re-directed to "The Personal Touch" Whitepaper shortly.</p> 
     <p>If this page isn't redirected in 5 seconds please click <a href="http://www.sefasinnovation.co.uk/personal_touch.pdf">here</a>.</p> 
    </body> 
</html> 

notification.htmlの追加リンクを使用すると、JavaScriptが無効になっている場合に手動でリダイレクトを行うことができます。

1

を得ました[OK]を

<?php 
    if(isset($_POST['submit'])) { 
     if($valid_fname == "Y") { 
      if($valid_sname == "Y") { 
       if($valid_company == "Y") { 
        if($valid_email == "Y") {     
        } 
        else { 
         echo "<p class=\"secText\">Please enter a valid email address</p>\n"; 
        } 
       } 
       else{ 
        echo "<p class=\"secText\">Please enter the company you work for</p>\n"; 
       } 
      } 
      else { 
       echo "<p class=\"secText\">Please enter your surname</p>\n"; 
      } 
     } 
     else { 
      echo "<p class=\"secText\">Please enter your first name</p>\n"; 
     } 
     if(($valid_fname == "Y")&&($valid_sname == "Y")&&($valid_company == "Y")&&($valid_email == "Y")) { 
      echo "<p class=\"secText\">Thank you for confirming your details, you will be re-directed to \"The Personal Touch\" Whitepaper shortly.</p>\n";   
      header('Location: http://www.sefasinnovation.co.uk/personal_touch.pdf'); 
      exit(); 
     } 
    } 
?> 

EDITは、PDFのページにユーザーをリダイレクトするためのリンクを作ってみますページのURL

<a href="http://www.sefasinnovation.co.uk/personal_touch.pdf">Thank you for confirming your details </a> 

か、2秒

後にユーザーをリダイレクトするメタタグを使用することができます
<meta http-equiv="refresh" content="2; url=http://www.sefasinnovation.co.uk/personal_touch.pdf" /> 
0

あなたの問題はここにある:

if(($valid_fname == "Y")&&($valid_sname == "Y")&&($valid_company == "Y")&&($valid_email == "Y")) { 
      echo "<p class=\"secText\">Thank you for confirming your details, you will be re-directed to \"The Personal Touch\" Whitepaper shortly.</p>\n";   
      header('Location: http://www.sefasinnovation.co.uk/personal_touch.pdf'); 
      exit(); 
     } 

ができませリダイレクトヘッダを送信する場合はページに何も出力。そのecho文を削除し、ページをもう一度試してください。

また、リダイレクト<meta>タグを使用してHTMLページを作成することもできます(5秒間の遅延を設定してリダイレクトすると、メッセージは正常に機能します)。

Googleでチュートリアルをご覧ください。

関連する問題