30

我有这个代码,为什么我的标题位置不起作用?它是在我的控制面板中更新、编辑和删除某些页面的一种形式...我在 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();

4

18 回答 18

57

那是因为你有一个输出:

?>
<?php

导致空行输出。

header() 必须在发送任何实际输出之前调用,无论是通过普通 HTML 标记、文件中的空行还是从 PHP

合并所有 PHP 代码并确保文件开头没有任何空格。

如果您在下面有任何其他脚本,也在header('location: index.php');添加之后。exit();

还要在最后一个if.

如果有内容,也可以通过注入javascript来重定向:

<?php
    echo "<script>window.location.href='target.php';</script>";
    exit;
?>
于 2012-09-21T06:24:06.070 回答
49

尝试ob_start();在代码顶部添加,即在include语句之前。

于 2012-09-21T06:40:42.103 回答
10

只需ob_start();在包含功能之前使用它会有所帮助

于 2014-09-12T08:51:45.703 回答
9

删除空间

正确:header("Location: home.php"); 标头(“位置:home.php”);

不正确:标头(“位置:home.php”);

删除 Location 和 : --> header("Location( remove space ): home.php");

于 2015-05-11T18:05:39.387 回答
6

函数 ob_start() 将打开输出缓冲。当输出缓冲处于活动状态时,不会从脚本发送输出(除了标题),而是将输出存储在内部缓冲区中。因此浏览器将不会收到任何输出,并且标头将起作用。此外,我们应该确保在代码顶部使用 header()。

于 2014-02-05T06:41:30.913 回答
4
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'); 
?>
于 2019-01-23T15:28:31.533 回答
2

我使用以下代码,它对我来说很好。

if(!isset($_SESSION['user'])) {
       ob_start();
       header("Location: https://sitename.com/login.php");
       exit();
} else { 

// my further code 

}
于 2014-01-08T05:26:29.673 回答
2

我的本地主机和共享服务器上有相同的应用程序。在我的本地主机上,重定向工作正常,而在这个共享服务器上却没有。我检查了 phpinfo,发现是什么原因造成的:

在此处输入图像描述

在我的本地主机上,我有这个:

在此处输入图像描述

所以我要求系统管理员增加这个值,在他这样做之后,一切正常。

于 2017-01-08T16:20:19.053 回答
1

我花了一些时间才弄清楚:我的 php 文件是用 UTF-8 编码的。并且 BOM 阻止标题位置正常工作。在记事本++中,我将文件编码设置为“UTF-8 without BOM”,问题就消失了。

于 2016-08-13T17:38:16.727 回答
1

对我来说只需添加 ob_start(); 在文件的开头。

于 2020-05-21T05:50:03.530 回答
1

检查以下是否启用

bz、mbstring、intl、ioncube_loader 和 Json 扩展。

于 2020-05-29T02:48:14.507 回答
0

Location它不应该是location

header('Location: index.php');
于 2012-09-21T06:42:21.403 回答
0

在我的情况下,我使用函数“ob_start()”创建了新的配置文件,并将其添加到我的 .gitignore 文件中。

于 2017-02-11T10:47:08.770 回答
0

我用这个

header("Location:comments.php");

它解决了..

于 2020-01-25T08:09:01.910 回答
0

在您的 HTML 代码中,您正在使用表单并将操作设置为“”,据我所知,这优先于表单中的标题。

我发现在表单中使用 action 元素而不是标题 Location 是一种选择。我假设您希望链接上有不同的选项,因此需要变量。

<?php $nextLink = "index.php"; ?>
<form method="post" action="<?php echo $nextLink; ?>">

我建议将变量放在 $_POST 之外以开始测试。

于 2021-05-05T16:36:41.257 回答
0

就我而言,它是在 ?> 之后的额外空格

删除了空格,瞧,它起作用了。

于 2021-05-06T18:07:16.090 回答
0

在我的情况下,我刚刚添加ob_start();了包含任何内容并且它有效!

于 2021-09-28T06:56:33.330 回答
-1

创建 config.php 并放置它可以工作的代码

于 2019-06-15T12:49:54.717 回答