Я пытаюсь перенаправить людей в 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 для учебника.