我有这段代码,为什么我的标题位置不起作用? 它是一种更新、编辑和删除控制面板中某些页面的形式...我在 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();
那是因为你有一个输出:
?>
<?php
导致空行输出。
header() 必须在发送任何实际输出之前调用,无论是通过正常的 HTML 标签、文件中的空行,还是从 PHP
合并所有 PHP 代码并确保文件开头没有任何空格。
如果您还有其他脚本,请在
header('location: index.php');
之后添加 exit();
。
还要将重定向标头移到最后一个
if
之后。
如果有内容,也可以通过注入javascript来重定向:
<?php
echo "<script>window.location.href='target.php';</script>";
exit;
?>
尝试在代码顶部添加
ob_start();
,即在 include
语句之前。
只需在包含函数之前使用
ob_start();
会有帮助
删除空格
正确: header("位置:home.php"); 或 header("位置:home.php");
不正确: header("位置:home.php");
删除 Location 和 : --> header("Location(remove space): home.php");
函数 ob_start() 将打开输出缓冲。当输出缓冲处于活动状态时,脚本不会发送任何输出(标头除外),而是将输出存储在内部缓冲区中。因此浏览器将不会收到任何输出,并且标头将起作用。此外,我们应该确保在代码顶部使用 header() 。
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');
?>
我使用以下代码,它对我来说效果很好。
if(!isset($_SESSION['user'])) {
ob_start();
header("Location: https://sitename.com/login.php");
exit();
} else {
// my further code
}
对我来说只需添加 ob_start();在文件的开头。
我花了一些时间才弄清楚这一点:我的 php 文件是用 UTF-8 编码的。而且 BOM 阻止标头位置正常工作。在Notepad++中,我将文件编码设置为“UTF-8 without BOM”,问题就消失了。
检查以下是否已启用
bz、mbstring、intl、ioncube_loader 和 Json 扩展。
应该是
Location
而不是location
:
header('Location: index.php');
在我的例子中,我使用函数“ob_start()”创建了新的配置文件,并将其添加到我的 .gitignore 文件中。
我用这个
header("Location:comments.php");
它解决了..
在 HTML 代码中,您正在使用表单并将操作设置为“”,据我所知,该操作优先于表单中的标头。
我发现使用表单中的操作元素而不是标题位置是一种选择。我假设您想要链接上的不同选项,因此需要变量。
<?php $nextLink = "index.php"; ?>
<form method="post" action="<?php echo $nextLink; ?>">
我建议将变量放在 $_POST 之外以开始测试。
就我而言,是 ?>
之后的额外空格删除空格,瞧,它起作用了。
就我而言,我只是在包含任何内容之前添加了
ob_start();
并且它有效!
所以,对我来说问题是 echo 语句。当我使用 echo 来判断发生了什么时,标头停止工作。
当我尝试放置 ob_start(); 时就在 header() 之前它没有解决任何问题。
当我输入 ob_start(); 时在文件顶部我的包含语句下方,它解决了问题。当然,我的 echo 语句停止工作了。
从我的角度来看,这是 Header() 方法的一个巨大缺陷。这使得故障排除变得更加困难,并且确实花费了我很多时间。
创建 config.php 并输入可以运行的代码