从登录页面获取“无法修改标头信息”


Getting "Cannot modify header information" from login page

这可能是

重复的,但是在运行以下代码时,我在登录时遇到了这个问题

<?php
include('includes/functions.php');
if(isset($_POST['login'])) {
    if(isset($_POST['username'])) {
        if(isset($_POST['password'])) {
            $username = $_POST['username'];
            $query = mysql_query("SELECT * FROM users WHERE Username = '$username'") or die(mysql_error());
            $user = mysql_fetch_array($query);
            if(md5($_POST['password']) == $user['password']); {
                echo 'Login successful';
                $_SESSION['user'] = $user['FullName'];
                header("Location:index.php");
           } 
        } else {
            echo "Please check your password!";
            include('login.php');
        }
    } else {
        echo "Please check your Username!";
        include('login.php');
    }
} else {
    echo "Please check you filled out the login form!";
    include('login.php');
  }
?>

因此,当输入用户名和密码时,我在浏览器中得到此输出

登录成功
警告:无法修改标头信息 - 标头已由/home/site/public_html/admin/dologin.php:12 在第 14 行的/home/site/public_html/admin/dologin.php 中发送

所有帮助将不胜感激

        if(md5($_POST['password']) == $user['password']); {
                                                        ^
            echo 'Login successful';
            $_SESSION['user'] = $user['FullName'];
            header("Location:index.php");
        }

有2个问题。if语句中的;不应该存在,然后回声也应该像其他答案已经提到的那样。删除echo应该可以修复该错误,但是由于;而导致标头不起作用,您的if被搞砸了。

旁注:如何防止 PHP 中的 SQL 注入?

header(<..>)之前应该没有输出,所以你应该删除它(删除带有 echo 的行)。

USe :-

<script>location.href - "index.php"; </script>

而不是

header("Location:index.php");

在文件的开头添加ob_start();并删除 PHP 标签前后的空格。