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.
- Перетаскивание столбцов PHP, JS, как это можно сделать?
- Определение размера загрузки файлов на стороне клиента?
- Проверьте, приобрел ли клиент определенные продукты в WooCommerce
- file_get_Contents не отправит строки запроса в url, поэтому ничего не получает с помощью $ _GET
- Класс PHP: глобальная переменная как свойство в классе
Я полностью смущен этим. Кто-нибудь знает, что я должен делать, чтобы он работал?
РЕДАКТИРОВАТЬ
Код 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-заголовок. Два варианта:
Я бы рекомендовал вам изучить второй вариант, так как он сделает вас более гибким.
также попробуйте include_once () вместо include (), который также может работать
Также см. Текстовую кодировку php- файла. Мой был UTF-8
с BOM
и это помешало скрипту работать. Но теперь работает безупречно после удаления BOM
…
Попробуйте перенаправить с помощью JavaScript:
<script type="text/javascript"> window.location.href='index.php'; </script>