PHP перенаправляется после отправки формы

Я пытаюсь перенаправить людей в PDF после того, как они правильно отправили форму, прежде чем я это сделаю. Я делаю некоторую проверку полей формы, чтобы они были правильно заполнены, теперь я пытался использовать header () чтобы выполнить перенаправление, но потому, что я повторил несколько раз, прежде чем я получу ошибку. Вот мой код ниже, что я могу сделать?

<?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 Хорошо, я получил его, чтобы работать с немного javascript в конце

  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"; } 

Вы можете использовать буферизацию вывода для отправки контента только после отправки заголовков.

 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(); } 

Однако, поскольку практически нет времени для отображения сообщения до того, как будет выполнено перенаправление, этот подход будет бесполезным.

Ваш лучший подход здесь, вероятно, заключается в перенаправлении вашей страницы на небольшую HTML-страницу, которая вызовет перенаправление JavaScript через некоторое время. Вот общая идея. Вы должны отсортировать данные.

PHP

 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; } 

notification.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 отключен.

попробуйте сделать ссылку для перенаправления пользователя на страницу pdf, чтобы ссылка содержала URL-адрес страницы pdf

 <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" /> 

Ваша проблема здесь:

  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 и echo попытку.

Кроме того, вы можете написать HTML-страницу с тэгом redirection <meta> (вы можете заставить его задерживаться, как 5 секунд, а затем перенаправлять, тогда ваше сообщение будет работать).

Посмотрите на Google для учебника.