“警告:无法修改标头信息 - 已经发送的标头”错误,php中没有空格

时间:2013-03-06 21:26:53

标签: php sql database header warnings

运行代码时,我仍然遇到错误。这是我的代码。我删除了所有的空格。我的html上的my表单转到我的php(action =“lib / login.php”)文件来检查用户是否存在。如果存在,则重定向。 dbconnect.php只是连接到我的数据库。有人可以帮忙吗?

文件夹布局:
LIB  
-dbconnect.php
-login.php(代码位于下方)
的index.html

<?php
 require_once("dbconnect.php"); 

 $loginuser = $_POST['username'];
 $loginpw = $_POST['password']; 
 $usertable = "Users";
 $users="Username";
 $pw="Password";
 $query = "SELECT $users, $pw FROM $usertable WHERE $users='$loginuser' AND $pw='$loginpw'";           
 $result = mysql_query($query);
 $num_rows = mysql_num_rows($result);                                  
 if (!$result) {
    die('Invalid query: ' . mysql_error());
}

 if ($num_rows>0) {
    header("Location:../index.html");
    exit();       
}                                      

&GT?;

1 个答案:

答案 0 :(得分:0)

如果您在输入后尝试发送HTTP标头,则会显示此消息。这是因为在HTTP中首先是头部,然后是主体。当输出进入正文时,输出后不再发送标题。

由于代码中没有echoprint或任何输出函数,因此可以通过

生成输出
  1. PHP错误消息
  2. 开幕前的内容<?php

  3. 至1:

    ob_*函数集是捕获所有输出脚本的好方法,无论这是错误消息还是常规输出。所以你可以添加一行:

    ob_start();
    

    在打开<?php标记后指示。

    然后在致电header()之前添加:

    if(ob_get_size() > 0) {
        // there was an error, display it and exit
        ob_end_flush();
        die();
    }
    

    请注意,在生产环境中,您应该完全禁用错误消息的显示,因为它们可能包含敏感信息。您可以通过php.ini中的settings_errors设置为0或每个脚本:

    ini_set('display_errors', 0);
    

    到2:

    假设你发布的代码是php文件的完整内容(<?php之前没有空格或空行),那么你可能会遇到UTF-8 BOM char的问题。 BOM表示字节顺序标记,由utf-8编码在内部使用。它在文本编辑器中不可见。 :)

    要删除它,有几个解决方案..将谷歌一个给你..... http://www.w3.org/International/questions/qa-byte-order-mark.en.php