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

表单模板:中的PHP行<;脚本>;原因警告:无法修改标题。可能的解决办法,php,Php,我在一个混合了php的文件头中有几行脚本: <script>$( "#company" ).autocomplete({ source: "<?php echo $absolute_site . "autocomplete/autocompletecompany.php" ?>".... ............. <script> 但我明白了 警告:无法修改标题信息-标题已发送 警告是指脚本中的php行 如何在没有警告的情况下执行

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

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

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

警告是指脚本中的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 <!!!! */ ?>
函数输出形式(){
…我的表格
} 
在模板文件中,作为第一行,我包含了表单文件。随后在正文(我想打印表单的地方)中,我调用了表单输出函数

 function output_form(){
  <form> ...my form </form>      
 } 
<?php include ('formfile.php'); /* no spaces before <!!!! */ ?>

后来在身体里

<?php form_output(); ?>


希望这能有所帮助

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

如果您试图在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.');
函数重定向($url){
$string='';
$string.='window.location=“.$url.”;
$string.='';
echo$字符串;
}
//在本页后面
重定向('example.com/my/url/here/01');

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

如果您试图在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.');
函数重定向($url){
$string='';
$string.='window.location=“.$url.”;
$string.='';
echo$字符串;
}
//在本页后面
重定向('example.com/my/url/here/01');

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

ob_start();

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

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

ob_start();

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

可能重复@Ben Pearl,谢谢链接。我已经编辑了我的问题,我想它不再是重复的,因为我提出了一个更具体问题的解决方案。再次感谢!可能是@Ben Pearl的副本谢谢你的链接。我已经编辑了我的问题,我想它不再是重复的,因为我提出了一个更具体问题的解决方案。再次感谢!“页面顶部”不是很好的描述。更像是在对浏览器进行任何类型的输出之前。另外,对于您的解决方案,如果我在浏览器上禁用JavaScript,这将不起作用。谢谢周二的Dave。这无疑是一个很好的解决方案。我还尝试(正如Qirel所建议的)尽可能远离用户可以从浏览器中禁用的任何内容,并尽可能多地保留服务器端。但是你的,这是一个很好的选择!!“页面顶部”不是很好的描述。更像是在对浏览器进行任何类型的输出之前。另外,对于您的解决方案,如果我在浏览器上禁用JavaScript,这将不起作用。谢谢周二的Dave。这无疑是一个很好的解决方案。我还尝试(正如Qirel所建议的)尽可能远离用户可以从浏览器中禁用的任何内容,并尽可能多地保留服务器端。但是你的,这是一个很好的选择!!@Okneloper我刚刚添加了
ob_start()
当我打开我的第一个@codeispoetry while ob_start修复了你的问题,我就足够可靠了,伙计们说你不应该在发送所有标题之前输出html,或者反过来说,在输出一些html之后发送标题(重定向)。Concider采用了一种分割登录和演示的良好做法,这样您首先在任何文件的顶部都有所有php逻辑,包括重定向,所有HTML都在文件的底部或另一个文件中。HTML部分应该只使用php生成输出(即,foreach循环生成表)没有商业逻辑,非常清楚。谢谢我通常会尝试将php逻辑放在开头(在html之前),但这次表单是一个单独的文件,它是模板中的include()。所以页面开始,中间包括表单。PHP(包含PHP和HTML输出表单)。您能建议一种方法,在使用模板时,将if
(isset$\u POST[“submit”]
放在html开始之前。或者(如果您知道)一个指向教程的链接,可以展示一种方法吗?如果你是form.php的作者,我建议你将该文件分为两个文件,即form-handler.php和form-template.php。还有使用OOP的concider。我不能推荐一个特定的教程,尽管我确信有很多。我发现这是一个非常好的php初学者总体教程/中级。虽然没有那么彻底,但涵盖了很多好的实践和现代设计模式。@Okneloper我刚刚添加了
ob_start()
当我打开我的第一个@codeispoetry while ob_start修复了你的问题并且我足够可靠时,伙计们说你不应该在发送所有标题之前输出html,或者反过来说-发送标题(重定向)在输出了一些html.Concider之后,我们采用了一种很好的方法来分割登录名和表示,这样您就可以首先在任何文件的顶部拥有所有php逻辑,包括重定向