我有这个代码,为什么我的标题位置不起作用? 它是一种更新,编辑和删除我的控制面板中的一些页面的形式...我在form.php的同一个文件夹中有一个index.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();
答案 0 :(得分:35)
尝试在代码顶部添加ob_start();
,即include
语句之前。
答案 1 :(得分:25)
那是因为你有一个输出:
?>
<?php
导致空行输出。
必须在发送任何实际输出之前调用header(),无论是普通HTML标记,文件中的空行还是PHP
合并所有PHP代码,并确保文件开头没有任何空格。
如果您还有其他任何脚本,请在header('location: index.php');
添加exit();
之后。
在最后if
之后移动重定向标题。
答案 2 :(得分:7)
在include函数之前使用ob_start();
它会有帮助
答案 3 :(得分:7)
删除空间
正确:标题(&#34;位置:home.php&#34;); 或标题(&#34;位置:home.php&#34;); 强>
不正确:标题(&#34;位置:home.php&#34;);
删除位置与: - &gt; 标题之间的空格(&#34;位置(删除空格):home.php&#34;);
答案 4 :(得分:5)
函数ob_start()将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本(标头除外)发送输出,而是将输出存储在内部缓冲区中。所以浏览器不会收到任何输出,标题也会起作用。我们也应该确保在代码顶部使用header()。
答案 5 :(得分:2)
我使用以下代码,它对我来说很好。
if(!isset($_SESSION['user'])) {
ob_start();
header("Location: https://sitename.com/login.php");
exit();
} else {
// my further code
}
答案 6 :(得分:1)
花了一些时间才弄明白:我的php文件是用UTF-8编码的。并且BOM阻止了标头位置正常工作。在Notepad ++中,我将文件编码设置为&#34; UTF-8,没有BOM&#34;问题就消失了。
答案 7 :(得分:1)
检查是否启用了以下功能
bz,mbstring,intl,ioncube_loader和Json扩展名。
答案 8 :(得分:0)
就我而言,在 ?>
之后是多余的空格删除了空格,瞧它起作用了。
答案 9 :(得分:0)
在您的 HTML 代码中,您正在使用表单并将操作设置为“”,我理解它优先于表单中的标题。
我发现在表单中使用 action 元素而不是 header Location 是一种选择。我假设您想要链接上的不同选项,因此是变量。
<?php $nextLink = "index.php"; ?>
<form method="post" action="<?php echo $nextLink; ?>">
我建议将变量放在 $_POST 之外以开始测试。
答案 10 :(得分:0)
对我来说只需添加ob_start();在文件的开头。
答案 11 :(得分:0)
我用这个
header("Location:comments.php");
它解决了..
答案 12 :(得分:0)
创建config.php并放入将起作用的代码
答案 13 :(得分:0)
ob_start();
应添加到第1行本身。 就像下面的例子一样
<?php
ob_start(); // needs to be added here
?>
<!DOCTYPE html>
<html lang="en">
// your code goes here
</html>
<?php
if(isset($_POST['submit']))
{
//code to save data in db goes here
}
header('location:index.php?msg=sav');
?>
在html下面添加它也不起作用。像下面一样
<!DOCTYPE html>
<html lang="en">
// your code goes here
</html>
<?php
ob_start(); // it doesnt work even if you add here
if(isset($_POST['submit']))
{
//code to save data in db goes here
}
header('location:index.php?msg=sav');
?>
答案 14 :(得分:0)
在我的情况下,我使用函数&#39; ob_start()&#39;创建了新的配置文件。并将其添加到我的.gitignore文件中。
答案 15 :(得分:0)
我在localhost和共享服务器上有相同的应用程序。在我的本地主机上,reddirects工作正常,而在这个共享服务器上没有。我检查了phpinfo,我看到了导致这种情况的原因:
在我的本地主机上,我有这个:
所以我要求系统管理员增加该值,在他这样做之后,一切正常。
答案 16 :(得分:0)
应该是Location
而不是location
:
header('Location: index.php');