[英]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.