代码之家  ›  专栏  ›  技术社区  ›  mikepenz

为什么每次我收到我已经发送的错误消息

  •  1
  • mikepenz  · 技术社区  · 14 年前

    我还有一个关于网络编程的问题。

    我编写了一个登录脚本,但是每次我尝试登录时,它都会说我已经发送了头信息。

    以下是两个文件:

    <?php
    if($_GET['logout'] == 1) {
        setcookie('authorized', 1, time()-3600);    
    }
    ?>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Login - photoAdminSite</title>
    </head>
    
    <style type="text/css"> 
        body {
        text-align: center;
        font-family: helvetica;
        }
    
        #loginForm {
        padding: 1em;
        background: #e3e3e3;
        width: 260px;
        margin: 3em auto 0;
        text-align: left;
    
        }
    </style>
    
    <body>
    
    <div id="loginForm">
    <form method="post" action="confirm_login_credentials.php">
    
    <h2>LOGIN</h2>
    <p>Username: <input type="text" name="username" /></p>
    <p>Password: <input type="password" name="password" /></p>
    <p><input type="submit" value="Login" name="submit" /></p>
    
    </form>
    </div>
    </body>
    </html>
    
    
    
    
    
    <?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    
    require 'database.php';
    
    $q = "SELECT id FROM users_photoadminsite WHERE user_name = '$username' AND password = '$password'";
    
    $result = $mysqli->query($q) or die(mysqli_error());
    
    if (mysqli_num_rows($result) == 1) {
        setcookie('authorized', 1, 0);
        header("Location: index.php");
    } else {
        header("Location: login.php");  
    }
    ?>
    

    我很乐意得到一些有用的答案。

    6 回复  |  直到 14 年前
        1
  •  3
  •   thetaiko    14 年前

    在将任何输出发送到浏览器之前,必须设置cookie和头文件。尝试将登录脚本移动到页面顶部。您可能还需要考虑清理查询以防止恶意活动。

        2
  •  1
  •   marianboda    14 年前

    该PHP文件的开头可能有一个空行。可能是PHP脚本开始前的空格

        3
  •  0
  •   Ignacio Vazquez-Abrams    14 年前

    参见第60、61和63行,以及它们是如何产生的。 之后 你所有的HTML?把它们放在前面。

        4
  •  0
  •   amphetamachine    14 年前

    当PHP说它已经发送了头文件时,这意味着脚本(或调用它的脚本)已经输出了一些文本。这包括所有错误消息。

    当第一段文本由PHP输出时,它会发送其头段,但不会在之前发送。要设置HTTP cookie(头的一部分),必须在输出任何文本之前发送cookie。

    您可以使用 ob_start ob_end_flush 以及其他输出控制功能。

    你也可以做的是设置 php.ini variable 当输出文本时自动发送cookie头。

        5
  •  0
  •   ashurexm    14 年前

    如果php.ini中没有启用输出缓冲,则会出现此错误,因为它将立即开始发送HTML。您需要编辑php.ini以启用输出缓冲。

        6
  •  0
  •   ZZ Coder    14 年前

    这是在窗户上吗?检查BOM。在记事本中打开它并将其保存为ansi以查看是否有帮助。