расположение заголовка не работает в моем php-коде
У меня есть этот код, почему мое расположение заголовка не работает? это форма обновления, редактирования и удаления некоторых страниц в моей панели управления... и у меня есть index.php файл в той же папке form.php... любая помощь, пожалуйста?() я попытался поместить заголовок после редактирования и удаления... и все равно перейти на страницу формы, а не на индекс...
<?php
include "../../includes/site_includes.php";
//send
if ((isset($_POST["send"])) && ($_POST["send"] == 1)) {
$pageid = $_POST["page_id"];
$pagetitle = $_POST["page_title"];
$nameinmenu = $_POST["page_menu_name"];
$nameinurl = $_POST["page_name_url"];
$link = $_POST["page_link"];
$picture = $_POST["page_pic"];
$desc = $_POST["page_desc"];
$content = $_POST["page_content"];
}
if ((isset($_POST["act"])) && ($_POST["act"] == "add")) {
$sql = insertpage();
if ($result = $mysqli->prepare($sql)) {
$result->bind_param("sssssss", $pagetitle, $nameinmenu, $nameinurl, $link, $picture, $desc, $content);
$result->execute();
$result->store_result();
$rows = $result->num_rows;
}
}
////edit
if ((isset($_GET["act"])) && ($_GET["act"] == "edit")) {
$sql = getfrompages();
if ($result = $mysqli->prepare($sql)) {
$rekza = $_GET["id"];
$result->bind_param("i", $rekza);
$result->execute();
$result->store_result();
$rowsZ = $result->num_rows;
}
if ($rowsZ > 0) {
$row = fetch($result);
$pageid = $row[0]["page_id"];
$pagetitle = $row[0]["page_title"];
$nameinmenu = $row[0]["page_menu_name"];
$nameinurl = $row[0]["page_name_url"];
$link = $row[0]["page_link"];
$picture = $row[0]["page_pic"];
$desc = $row[0]["page_desc"];
$content = $row[0]["page_content"];
}
}
if ((isset($_GET["act"])) && ($_GET["act"] == "delete")) {
$thedelid = $_GET["id"];
$sql2 = delpage();
if ($result2 = $mysqli->prepare($sql2)) {
$result2->bind_param("i", $thedelid);
$result2->execute();
$result2->store_result();
$rowsZ2 = $result2->num_rows;
}
}
header('location: index.php');
exit();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> pages add </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body>
<form method="post" action="">
<table>
<tr>
<td style="font-weight:bold;">title</td>
<td><input type="text" name="page_title" value="<?=$pagetitle?>" /></td>
</tr>
<tr>
<td style="font-weight:bold;">name in menu</td>
<td><input type="text" name="page_menu_name" value="<?=$nameinmenu?>" /></td>
</tr>
<tr>
<td style="font-weight:bold;">name in url</td>
<td><input type="text" name="page_name_url" value="<?=$nameinurl?>" /></td>
</tr>
<tr>
<td style="font-weight:bold;">link</td>
<td><input type="text" name="page_link" value="<?=$link?>" /></td>
</tr>
<tr>
<td style="font-weight:bold;">picture</td>
<td><input type="text" name="page_pic" value="<?=$picture?>" /></td>
</tr>
<tr>
<td style="font-weight:bold;">description</td>
<td><textarea name="page_desc"><?=$desc?></textarea></td>
</tr>
<tr>
<td style="font-weight:bold;">content</td>
<td><textarea name="page_content"><?=$content?></textarea></td>
</tr>
<tr>
<td colspan="2">
<input type="hidden" name="send" value="1" />
<input type="hidden" name="act" value="<?=$_GET["act"]?>" />
<input type="hidden" name="page_id" value="<?=$pageid?>" />
<input type="submit" value="add" /></td>
</tr>
</table>
</form>
</body>
</html>
Решено: с помощью кода @Mihai Iorga я добавил ob_start();
10 answers
Это потому, что у вас есть вывод:
?>
<?php
Выводит пустую строку.
заголовок() должен быть вызван до отправки любого фактического вывода, либо обычными тегами HTML, пустыми строками в файле, либо из PHP
Объедините все ваши PHP-коды и убедитесь, что в начале файла нет пробелов.
Также после header('location: index.php');
добавьте exit();
, если у вас есть какие-либо другие сценарии ниже.
Также переместите заголовок перенаправления после последнего if
.
Попробуйте добавить ob_start();
в верхней части кода, т.е. перед оператором include
.
Удалить Пространство
Правильно: заголовок ("Местоположение: home.php "); или заголовок ("Location:home.php");
Неверно: заголовок ("Местоположение:home.php ");
Удалите пробел между местоположением и : --> заголовок ("Расположение(удалить пробел): home.php ");
Просто используйте ob_start();
перед включением функции, это поможет
Функция ob_start() включит буферизацию вывода. В то время как буферизация вывода активна, вывод из сценария не отправляется (кроме заголовков), вместо этого вывод сохраняется во внутреннем буфере. Таким образом, браузер не получит никаких выходных данных, и заголовок будет работать.Также мы должны убедиться, что заголовок() используется в верхней части кода.
Я использую следующий код, и он отлично работает для меня.
if(!isset($_SESSION['user'])) {
ob_start();
header("Location: https://sitename.com/login.php");
exit();
} else {
// my further code
}
Мне потребовалось некоторое время, чтобы понять это: мой php-файл был закодирован в UTF-8. И спецификация препятствовала правильной работе расположения заголовка. В Notepad++ я установил кодировку файла "UTF-8 без спецификации", и проблема исчезла.
Это должно быть Location
не location
:
header('Location: index.php');
У меня было одно и то же приложение на моем локальном хосте и на общем сервере. На моем локальном хосте красные директории работали нормально, а на этом общем сервере - нет. Я проверил phpinfo и увидел, что вызвало это:
В то время как на моем локальном хостинге у меня было это:
Поэтому я попросил системного администратора увеличить это значение, и после того, как он это сделал, все работало нормально.
В моем случае я создал новый конфигурационный файл с функцией 'ob_start()' и добавил его в свой файл .gitignore.