Intereting Posts
PHP и mySQL одинарная кавычка или двойная кавычка? Magento – возникла проблема с процессом переиндексации – Каталог продуктов Переносимость GLOB_BRACE? Как вы можете сравнивать наборы чисел и получать наиболее релевантные результаты с использованием MySQL и PHP? Простая структура сайта RewriteRule для параметров PHP GET Связывание параметров для инструкции PDO внутри цикла SQL QUERY ON MULTIPLES TABLES Отображение выбранного значения в раскрывающемся списке выберите с помощью PHP Подзапрос в doctrine2 notIN Функция Zend \ Mvc \ Router \ Http \ Метод и дочерние маршруты Вызвать URL с помощью wget и вернуть ERRORLEVEL в зависимости от содержимого URL-адреса Отправка html-сообщения по электронной почте дает raw html как я могу исключить субботу и воскресенье, когда я создаю даты Отправка электронной почты с localhost в php в windows Как перенаправить без входа пользователей на страницу входа в WordPress?

Перенаправление PHP Header не работает

include('header.php'); $name = $_POST['name']; $score = $_POST['score']; $dept = $_POST['dept']; $MyDB->prep("INSERT INTO demo (`id`,`name`,`score`,`dept`, `date`) VALUES ('','$name','$score','$dept','$date')"); // Bind a value to our :id hook // Produces: SELECT * FROM demo_table WHERE id = '23' $MyDB->bind(':date', $date); // Run the query $MyDB->run(); header('Location:index.php'); exit; 

Вышеприведенный код продолжает давать мне проблему с перенаправлением. Ошибка следующая:

Предупреждение. Невозможно изменить информацию заголовка – уже отправленные заголовки (вывод запущен в /Applications/MAMP/htdocs/testygubbins/OO/test/header.php:15) в / Applications / MAMP / htdocs / testygubbins / OO / test / form. php в строке 16.

Я полностью смущен этим. Кто-нибудь знает, что я должен делать, чтобы он работал?

РЕДАКТИРОВАТЬ

Код header.php:

 <?php include('class.user.php'); include('class.Connection.php'); $date = date('Ym-j'); ?> <html> <head> <link rel=StyleSheet href="css/style.css" type="text/css" media=screen> <title>Test</title> </head> <body> <div id="page"> в <?php include('class.user.php'); include('class.Connection.php'); $date = date('Ym-j'); ?> <html> <head> <link rel=StyleSheet href="css/style.css" type="text/css" media=screen> <title>Test</title> </head> <body> <div id="page"> в <?php include('class.user.php'); include('class.Connection.php'); $date = date('Ym-j'); ?> <html> <head> <link rel=StyleSheet href="css/style.css" type="text/css" media=screen> <title>Test</title> </head> <body> <div id="page"> 

Посмотрите внимательно на свои варианты – возможно, у вас есть пустая строка после закрытия?>?

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

Обратите внимание, что законно оставить закрытие?> Off include-файла, что является полезной идиомой для предотвращения этой проблемы.

(EDIT: глядя на ваш заголовок, вам нужно избегать выполнения любого вывода HTML, если вы хотите выводить заголовки или использовать буферизацию вывода для его захвата).

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

Примечание. HTTP / 1.1 требует абсолютного URI в качестве аргумента для Location: включая схему, имя хоста и абсолютный путь, но некоторые клиенты принимают относительные URI. Обычно вы можете использовать $ _SERVER ['HTTP_HOST'], $ _SERVER ['PHP_SELF'] и dirname (), чтобы сделать абсолютный URI от относительного:

ОБЩИЕ ПРОБЛЕМЫ:

1) перед header(.......); не должно быть никакого выхода (т.е. echo.. или HTML-кодов header(.......); команда.

2) удалите любое пробел (или новую строку ) перед тегами <?php и после ?> .

3) ЗОЛОТОЕ ПРАВИЛО! – проверьте, поддерживает ли этот файл php (а также, если вы include другие файлы) UTF8 без кодировки спецификации (а не только UTF-8 ). Это проблема во многих случаях (потому что кодированный файл UTF8 имеет что-то особенное в начале файла php, которое ваш текстовый редактор не показывает) !!!!!!!!!!!

4) После header(...); вы должны использовать exit;

5) всегда используйте ссылку 301 или 302:

 header("location: http://example.com", true, 301 ); exit; 

6) Включите отчет об ошибках. И сообщите об ошибке.

7) Если ни одно из вышеизложенных не помогает, используйте перенаправление JAVSCRIPT (однако, сильно не рекомендуемый метод), может быть последним шансом в пользовательских случаях …:

 echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>"; exit; 

Альтернативно, чтобы не думать о новой строке или пространстве где-то в файле, вы можете буферизовать вывод. В основном вы вызываете ob_start() в самом начале файла и ob_end_flush() в конце. Более подробную информацию вы можете найти в описании функции ob-start php.net .

Изменить: если вы используете буферизацию, вы можете выводить HTML до и после функции header () – буферизация будет игнорировать вывод и возвращать только заголовок перенаправления.

Попробуй это :

 **ob_start();** include('header.php'); $name = $_POST['name']; $score = $_POST['score']; $dept = $_POST['dept']; $MyDB->prep("INSERT INTO demo (`id`,`name`,`score`,`dept`, `date`) VALUES ('','$name','$score','$dept','$date')"); // Bind a value to our :id hook // Produces: SELECT * FROM demo_table WHERE id = '23' $MyDB->bind(':date', $date); // Run the query $MyDB->run(); header('Location:index.php'); **ob_end_flush();** exit; в **ob_start();** include('header.php'); $name = $_POST['name']; $score = $_POST['score']; $dept = $_POST['dept']; $MyDB->prep("INSERT INTO demo (`id`,`name`,`score`,`dept`, `date`) VALUES ('','$name','$score','$dept','$date')"); // Bind a value to our :id hook // Produces: SELECT * FROM demo_table WHERE id = '23' $MyDB->bind(':date', $date); // Run the query $MyDB->run(); header('Location:index.php'); **ob_end_flush();** exit; 

Посмотрите на /Applications/MAMP/htdocs/testygubbins/OO/test/header.php строку 15.

В этом положении он делает некоторый вывод. Почини это. 🙂

Если я правильно понял, что-то уже отправлено из header.php (возможно, некоторый HTML), чтобы заголовки были установлены. Возможно, вам придется перепроверить свой файл header.php для любой части, которая может выводить HTML или пробелы перед первым

EDIT: теперь я уверен, что он вызван из header.php, поскольку у вас есть эти выходные данные HTML. Вы можете исправить это, удалив «include (« header.php »); и скопируйте следующий код в свой файл.

 include('class.user.php'); include('class.Connection.php'); $date = date('Ym-j'); в include('class.user.php'); include('class.Connection.php'); $date = date('Ym-j'); в include('class.user.php'); include('class.Connection.php'); $date = date('Ym-j'); 

У вас может быть некоторый «простой текст» где-то в php-файлах, который интерпретируется как вывод сценария. Это может быть даже новая строка до или после спецификатора тега php script (меньше + вопросительный знак + «php»).

Кроме того, если я правильно помню, согласно спецификации http, заголовок «Местоположение» принимает только полные URL-адреса, а не относительные местоположения. Имейте это в виду.

Не включайте header.php. Вы не должны выводить HTML, когда будете перенаправлять.

Создайте новый файл, например. "Pre.php". Поместите это в это:

 <?php include('class.user.php'); include('class.Connection.php'); ?> в <?php include('class.user.php'); include('class.Connection.php'); ?> в <?php include('class.user.php'); include('class.Connection.php'); ?> 

Затем в header.php укажите, что вместо двух других файлов. В form.php включить pre.php вместо header.php.

Ваш include производит выходные данные, что делает невозможным позднее отправить HTTP-заголовок. Два варианта:

  1. Переместите вывод где-нибудь после включения.
  2. Используйте буферизацию вывода , то есть в самом начале вашего скрипта, поместите ob_start (), а в конце поместите ob_flush (). Это позволяет PHP сначала ждать, пока все выходные данные будут собраны, определить, в каком порядке отобразить его, и выводит его.

Я бы рекомендовал вам изучить второй вариант, так как он сделает вас более гибким.

также попробуйте include_once () вместо include (), который также может работать

Также см. Текстовую кодировку php- файла. Мой был UTF-8 с BOM и это помешало скрипту работать. Но теперь работает безупречно после удаления BOM

Попробуйте перенаправить с помощью JavaScript:

 <script type="text/javascript"> window.location.href='index.php'; </script>