标头错误PHP

时间:2013-10-08 19:32:55

标签: php header

好的,所以我正在尝试创建一个登录脚本,但是当我执行它时会出现这两个错误:

  

警告:session_regenerate_id()[function.session-regenerate-id]:无法重新生成会话ID - 已在第29行/home/henrirkm/public_html/login/login.php中发送的标头

     

警告:无法修改标题信息 - 第47行/home/henrirkm/public_html/login/login.php中已经发送的标题(在/home/henrirkm/public_html/res/mysql.php:2处开始输出)< / p>

我的代码是这样的:

<?php

session_start();

// MYSQL database connection

include "../res/mysql.php";

$username = mysql_real_escape_string($_POST['username']);

$password = mysql_real_escape_string($_POST['password']);



//select from login table

$qry = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";

$result=mysql_query($qry);



//Check whether the query was successful or not

    if($result) {

        if(mysql_num_rows($result) == 1) {

            //Login Successful

            session_regenerate_id();

            $member = mysql_fetch_assoc($result);

            $_SESSION['id'] = $member['id'];

            $_SESSION['username'] = $member['username'];

            $_SESSION['email'] = $member['email'];

            session_write_close();







            header("location: ../home/index.php");

            exit();

        }else {

            //Login failed

            header("location: index.php?info=loginerror");

            exit();

        }

    }else {

        die("Query failed");

    }

?>

请帮帮我!谢谢: - )

4 个答案:

答案 0 :(得分:3)

这里输出:res / mysql.php第2行。

答案 1 :(得分:1)

如果您回显任何内容(除非您使用输出缓冲),标题也将被发送。

在您发布的代码中,我没有看到任何回显的内容,但您还包括../res/mysql.php。如果这与内容相呼应,则仅通过包含该文件来发送标题。

请注意,您实际上并不需要回应任何事情。在开始<?之前或结束?>之后的任何空格也可能导致问题。因此,通常建议完全删除结束?>

答案 2 :(得分:0)

根据http://php.net/manual/en/function.header.php

中所述的PHP文档
  

请记住,在任何实际输出之前必须调用header()   通过普通HTML标记,文件中的空行或PHP发送。   使用include或require读取代码是一个非常常见的错误,   函数或其他文件访问函数,并且有空格或空   调用header()之前输出的行。一样的问题   使用单个PHP / HTML文件时存在。

只需在脚本开头传递标题,这样可以确保标题正确传递并可以下载文件。

答案 3 :(得分:-1)

错误清楚地告诉我OP已经开始

output started at /home/henrirkm/public_html/res/mysql.php:2