簡體   English   中英

您能看到我的簡單php代碼有什么問題嗎?

[英]Can you see what's wrong with my simple php code?

我只是不知道為什么我得到這個錯誤:

警告:無法修改標頭信息-已在C:\\ Users \\ Gateway \\ Documents \\ xampp \\ htdocs \\ login中發送的標頭(輸出從C:\\ Users \\ Gateway \\ Documents \\ xampp \\ htdocs \\ login.php:3開始)。第14行的php

這是代碼:

if (isset($_POST['submit'])) {

    $username = sanitize($_POST['username']);
    $password = sanitize($_POST['password']);

    if ($username) {
        if ($password) {
            $query = mysql_query(" SELECT * FROM users WHERE username = '$username' && password = '$password' ");
            if (mysql_num_rows($query) == 1) {
                $setCookie = setcookie('loggedIn', 1, time()+3600);
                echo 'user found';
            } else {
                $error = 'The username and/or password you entered is incorrect';
            }
        } else {
            $error = 'Please enter a password';
        }
    } else {
        $error = 'Please enter a username';
    }

}

我輸入用戶名“ admin”和密碼“ 123”,這在我的用戶表中的數據庫中存在一條記錄。 輸入正確的用戶名/密碼組合后,我回顯的“用戶已找到”消息將起作用。

問題是,未設置名為“ loggedIn”的cookie,但我知道無法修改標頭錯誤。

為什么?

問題不在於上面的代碼。 給您帶來問題的代碼可能在發布之前。

這意味着在設置cookie之前,您正在顯示輸出(echo,print_r,print,var_dump等)。 這也可能是由標題空白字符引起的。

例如:

 <?php
setcookie('foo', 'bar'); // errors

要么...

<?php
echo 'foo';
setcookie('foo', 'bar'); // errors

檢查login.php第3行。 根據錯誤消息,您可能正在那里輸出內容。

顯然,您的代碼在setcookie()函數之前的某個位置有輸出。 我在這段代碼中看不到它,但是也許您在“”之前加上了一些“回聲”,或者甚至在“

如果在設置cookie之前由於錯誤導致輸出,例如mysql_query ,則會收到標題警告。 一個常見的問題是<?php開頭標簽之前的空格或文本,或對數據進行編碼。 一些文本編輯器將此信息添加到文件的開頭。

可能您在setcookie部分之前有一些空格或其他字符。 使用輸出緩沖來避免問題

檢查之前是否有空白

手冊

setcookie()定義要與其他HTTP標頭一起發送的cookie。 與其他標頭一樣, 必須在腳本的任何輸出之前發送 cookie(這是協議限制)

發送一些輸出后,您的腳本可能會嘗試設置cookie。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM