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


Cannot modify header information - headers already sent

我知道这是一个众所周知的问题,但我已经尝试了所有的解决方案,但都没有成功:(

这是我的代码:

<?php
ob_start();
if (!empty($_POST)) { // if submit
    $username = $_POST['username'];
    $userpass = $_POST['userpass'];
    mysql_connect('localhost', 'root', 'root') or die(mysql_error());
    mysql_select_db('ita4') or die($connection_error);
    function login($username, $userpass) {
        $sqlQuery = "SELECT COUNT(userid) FROM users WHERE name='$username' AND password='$userpass' AND admin='t'";
        $runQuery = mysql_query($sqlQuery);    
        return (mysql_result($runQuery, 0) == 1) ? TRUE : FALSE; 
    }
    if(login($username, $userpass)) {
        setcookie("username", $username, time()+60*60*24*30);
        $_COOKIE['username'] = $username;
        echo "Me:".$_COOKIE['username'];
        //echo "<script> location.replace('done.html'); </script>";
    } else {
        echo "<script> alert('Your input data is not found!'); </script>";
    }
}
?>
<html>
<head>
    <title>Login</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <meta http-equiv=content-type content="text/html; charset=UTF-8"/>
</head>
<body>
<div id="upper">
<a href="index.html">Home</a> &nbsp;•&nbsp; <a href="login.html">Login</a> &nbsp;•&nbsp; <a href="about.html">About</a>
</div>
<div id="container">
    <div id="loginDiv">
        <form action="login.php" onsubmit="return checkEmpty()" method="post" name="loginForm">
            <table>
                <tr>
                    <td style="width:100px">Name: </td>
                    <td>
                    <input name="username" id="username" type="text" style="width:250px"></td>
                </tr>
                <tr>
                    <td style="width:100px">Password: </td>
                    <td>
                    <input name="userpass" id="userpass" type="password" style="width:250px"></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center"><input id="loginImg" type="image" src="images/loginButton.png"></td>
                </tr>
            </table>
        </form>
    </div>
</div>
<div id="lower">
    <br><br><br><br><br>
    <p style="text-align:center">COPYRIGHTS © 2013 &nbsp;&nbsp;•&nbsp;&nbsp; WWW.HISHAM.WS</p>
</div>

<script type="text/javascript">
function checkEmpty() {
    var username = document.getElementById("username").value;
    var userpass  = document.getElementById("userpass").value;
    if(username=="" || username==null) { alert("You've to enter your name!"); }
    else if(userpass=="" || userpass==null) { alert("You've to enter a password!"); }   
    else { return true; } 
    return false; 
}
</script>
</body>
</html>

提前感谢

因此,针对我最初没有帮助您的反应,我决定像您一样继续构建数据库和表。我创建了一个名为ita4的新数据库,并添加了一个称为users的表,其中包含四个字段(userid、name、password和admin)。我添加了一个名为josh的用户,密码为josh,管理员设置为"t"。然后,我把你的文件放在我的本地开发环境中,并将其命名为login.php。然后,我在浏览器中加载该页面,输入josh作为用户名,输入joh作为密码,结果它在页面顶部显示"Me:josh",登录页面仍在其下方显示。我没有收到任何错误。

如果您还没有走到这一步,那么错误消息可能是因为数据库连接详细信息不正确,或者您的表没有这些字段之一。在数据库连接代码之后确实有一个"or die(mysql_error()"。

文档中的头必须是第一个。你的代码应该看起来像

<?php header("header information"); ?>
<html>
 ... Your HTML HERE ...
</html>

更多信息可以在这里的PHP文档中找到。

据我所知,如果发生登录,您希望将用户redirect转移到另一个页面。

您可以使用javascript和/或meta重定向来实现这一点。

这个问题可能也有帮助:如果用户已经登录

,如何重定向

您没有告诉引起通知的行号。但我想这是因为你在做setCookie()

您已经在使用ob_start(),所以这很好。

我建议您注意,"无字符"应该位于文档的开头,ob_start()之前。在启动<?php之前,请特别查找任何字符,甚至空格或回车(新行)。让<?php成为文件中的第一个内容。