このエラーが発生した理由がわかりました。コードに問題はなかったので、投稿から削除しました。
私の PHP ページは UTF-8 としてエンコードされていましたが、BOM (バイト オーダー マーク) なしで UTF-8 としてエンコードする必要がありました。
私が理解しているように、BOM は出力として解釈されるか、少なくとも出力を作成します。
すべての回答に感謝します。私の質問は重複していました。申し訳ありません。他の投稿を見ましたが、十分ではありませんでした。ありがとう !
setcookie を使用する前にすでに HTML 出力を行っている場合は、HTML 出力が開始された場所を見つける必要があります。その行の上に、出力バッファリングを開始するob_start Docs関数を配置します。
出力バッファリングを有効にしても、プログラムは HTML を「出力」できますが、すぐには送信されません。その後、問題なく setcookie を呼び出すことができるはずです。
<?php
function login($username,$pwd)
{
$mysqli=dbconnect(); //no output
$query = "SELECT * FROM `users` WHERE `name`='$username' AND `password`='$pwd'";
$result = $mysqli->query($query) or die($mysqli->error.__LINE__);
if($result->num_rows == 1) {
while($row = $result->fetch_assoc()) {
ob_start(); //set output buffering before setting cookies..
setcookie("ID", $row['userid'], time()+3600*24*365);
ob_end_flush(); // flush data
if (isset($_COOKIE['UNIQUE_ID']))
{echo 'Connected';}
else{echo 'No cookie today :(';}
}
}
dbclose($mysqli); //no output
}
?>
スクリプトが終了すると、出力バッファが自動的にブラウザに送信されるため、それ以上気にする必要はなく、残りは自動的に機能します。
タグを開く前に空白をすべて削除してみてください。
終了タグはオプションであり、空白を出力として誤って解釈するのに役立つ場合があります