表单模板:<脚本> 中的 PHP 行 原因 警告:无法修改标题.可能的解决方案


Form template: PHP line in <script> cause Warning: Cannot modify header. Possible solution

我在混合了 php 的文件的头部有几行脚本:

    <script>$( "#company" ).autocomplete({
        source: "<?php echo  $absolute_site . "autocomplete/autocompletecompany.php" ?>"....
.............
<script>

稍后在文件中传递一个 php 命令:

 header("Location: index.php?act=edit&peopleID=$last_peopleID")

但我得到

警告:无法修改标头信息 - 标头已发送

警告是指脚本中的 PHP 行。

如何在没有收到警告的情况下执行此操作?谢谢!

编辑在阅读了如何修复 PHP 问题(和答案)中的"标头已发送"错误和 Okneloper 对我原始问题的回答后,我修改了标题并提出了我使用的解决方案,希望这个问题不再是重复的,它可能对遇到相同问题的其他人有用。

溶液

我的表单文件包括:php 部分

 if (isset ($_POST["submit"]) ){ 
           .... all the sql commands including the:
           header("Location:pathtopage")
} 

和 HTML 表单演示:

<form> ...my form </form>

问题是因为模板文件在正文中调用表单文件,即在标题之后。为了避免这种情况,在表单文件中,我将所有表单输出放在一个函数中。

 function output_form(){
  <form> ...my form </form>      
 } 

在模板文件中,作为第一行,我包含了表单文件。然后稍后在正文中(我想打印我的表单),我调用了表单输出函数。

<?php include ('formfile.php'); /* no spaces before <!!!! */ ?>

身体后期

<?php form_output(); ?>

希望这能有所帮助!

您需要在执行任何输出之前发送标头或在脚本顶部启用输出缓冲:

ob_start();
标头

在响应正文之前发送,因此如果已开始输出 body,则无法更改或添加标头。

标头已发送,这意味着您无法更改它们。 如果要自定义标头,则必须在发送标头之前执行此操作(页面顶部)。

如果您尝试在 PHP 中重定向,请使用 javascript。 这是您内联操作的方式:

function redirect($url){
    $string = '<script type="text/javascript">';
    $string .= 'window.location = "' . $url . '"';
    $string .= '</script>';
    echo $string;
}
//later in the page
redirect('example.com/my/url/here/01.');