Не знаю, почему это не работает. Вот код:
if ((isset($_POST['cancel'])) && ($_POST['cancel'] == 'cancel')) { header('Location: page1.php'); echo $_POST['cancel']; }
Вместо перенаправления страницы этот вывод cancel
на веб-странице. Он пропустил перенаправление. Зачем? Как я могу это исправить? page1.php – это настоящая страница, расположенная в той же папке, что и текущая страница. Вышеупомянутый код – это первые строки файла php. Ничего раньше. Ничего. Даже пробелы.
Вероятно, это проблема, вызванная отправкой заголовков.
Это происходит, если вы что-то повторили, прежде чем принимать решение о перенаправлении. Если это так, то начальные (по умолчанию) заголовки отправлены, и новые заголовки не могут заменить что-то, что уже есть в буфере вывода, готовясь к отправке в браузер.
Иногда даже не нужно было что-то повторять:
Чтобы проверить, если это так, вы должны включить отчет об ошибках: error_reporting(E_ALL);
и установите ошибки, которые будут отображаться ini_set('display_errors', TRUE);
после чего вы, скорее всего, увидите предупреждение со ссылкой на уже отправленные заголовки.
Исправление таких ошибок:
MVC решает его как функционально, так и логику в контроллере, а контроллер запускает отображение / рендеринг представления только в конце контроллеров. Это означает, что вы можете решить сделать перенаправление где-нибудь внутри действия, но не с видом.
Используйте @obstart
или попробуйте использовать Java Script
положите ваш obstart();
в верхнюю часть страницы
if ((isset($_POST['cancel'])) && ($_POST['cancel'] == 'cancel')) { header('Location: page1.php'); exit(); }
Если вы используете Javascript
используйте window.location.href
Пример window.location.href:
if ((isset($_POST['cancel'])) && ($_POST['cancel'] == 'cancel')) { echo "<script type='text/javascript'>window.location.href = 'page1.php';</script>" exit(); }
Я уже сталкивался с такой проблемой, и теперь я не использую header('Location: pageExample.php');
больше, вместо этого я использую javascript document.location
.
Измените свой:
header('Location: page1.php');
Что-то вроде этого:
echo "<script type='text/javascript'> document.location = 'page1.php'; </script>";
И какова цель echo $_POST['cancel'];
кстати ?, просто удалите эту строку, если вы хотите только перенаправление. Я использую этот <script>
каждый раз, и это не подводит меня. 🙂
У меня также была аналогичная проблема в ходьбе. Но после размещения ob_start (); в начале страницы php, откуда перенаправлялась страница, она работала нормально.
Пожалуйста, найдите пример исправления:
fileName: index.php
<?php ob_start(); ... header('Location: page1.php'); ... ob_end_flush(); ?>
Для меня это тоже не работало. Затем я пытаюсь использовать javascript внутри php, например
echo "<script type='text/javascript'> window.location='index.php'; </script>";
Это определенно будет работать.
Пекка ответил на мой вопрос в комментариях. Он не отправил ответ, так что я сейчас. Используйте метод exit()
после перенаправления заголовка. По какой-то причине остальная часть кода продолжает выполняться после перенаправления метода header (). Когда выполняется оставшаяся часть кода, на страницу выводится оператор эха. И вы не можете перенаправить использование функции заголовка после вывода на страницу. Чтобы избежать остальной части кода от выполнения, используйте exit()
. Спасибо Пекке.
ОБНОВЛЕНИЕ: при использовании браузера Internet Explorer я заметил, что $ _POST ['cancel'] не является надежным. Я не совсем уверен, почему это так, но я подозреваю, что IE добавляет дополнительные переменные в форму submit, в частности, публикуется переменная «cancel». Я решил это, используя имя переменной, кроме «cancel». Для меня работает комбинация использования функции exit () и имени уникальной переменной.
Будьте очень осторожны с пробелами и другими вещами, которые могут повлиять на уже достигнутый «выход». Я, конечно, знаю это, но все еще страдал от одной и той же проблемы. Весь мой «Admin.php» -файл имел некоторые пробелы после закрытия php-тега?> Внизу внизу последней строки 🙂
Легко обнаруживается путем добавления …
error_reporting(E_ALL);
… который рассказал мне, какая строка кода генерирует результат.
У меня была аналогичная проблема … решена путем добавления ob_start();
и ob_end_flush();
…
<?php ob_start(); require 'engine/vishnuHTML.class.php'; require 'engine/admin/login.class.php'; $html=new vishnuHTML(); (!isset($_SESSION))?session_start():""; /* blah bla Code ........... ........... */ </div> </div> <?php } ob_end_flush(); ?>
Подумайте об ob_start () как о том, что «Начните вспоминать все, что обычно выводится, но пока не делайте с ним ничего».
ob_end_clean () или ob_flush (), которые либо перестают сохранять вещи, либо отбрасывают все, что было сохранено, либо останавливают сохранение и выводят все сразу, соответственно.
Neer для указания кода выхода здесь, чтобы php не выполнял дальше
if ((isset($_POST['cancel'])) && ($_POST['cancel'] == 'cancel')) { header('Location: page1.php'); exit(0); // require to exit here }
Попробуйте это, добавьте @ob_start()
в верхней части страницы,
if ((isset($_POST['cancel'])) && ($_POST['cancel'] == 'cancel')) { header('Location: page1.php'); exit(); }
Используйте следующий код:
if(isset($_SERVER['HTTPS']) == 'on') { $self = $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']; ?> <script type='text/javascript'> window.location.href = 'http://<?php echo $self ?>'; </script>" <?php exit(); } ?>
Попробуйте добавить
ob_start ();
в верхней части кода, т.е. перед оператором include.
Убедитесь, что вы не оставляете пробел перед <?php
когда вы запускаете <?php
в верхней части страницы.