Je me débats avec cette erreur depuis un moment maintenant.
Au départ, j'ai simplement pensé qu'il s'agissait d'un espace blanc, mais après une recherche plus approfondie, je pense qu'il s'agit peut-être d'un problème similaire à celui-ci :
Recherchez toutes les déclarations qui pourraient envoyer une sortie à l'utilisateur avant cette déclaration d'en-tête. Si vous en trouvez une ou plusieurs, modifiez votre code pour placer la déclaration d'en-tête avant elles. Les expressions conditionnelles complexes peuvent compliquer la question, mais elles peuvent aussi aider à résoudre le problème. Considérez une expression conditionnelle en haut du script de PHP qui détermine la valeur de l'en-tête le plus tôt possible et la fixe à cet endroit.
Je suppose que l'en-tête include est à l'origine du problème, ainsi que la fonction header(), mais je ne sais pas comment réorganiser le code pour éliminer cette erreur.
Comment supprimer l'erreur ?
<?php
$username = $password = $token = $fName = "";
include_once 'header.php';
if (isset($_POST['username']) && isset($_POST['password']))
$username = sanitizeString($_POST['username']);
$password = sanitizeString($_POST['password']); //Set temporary username and password variables
$token = md5("$password"); //Encrypt temporary password
if ($username != 'admin')
{
header("Location:summary.php");
}
elseif($username == 'admin')
{
header("Location:admin.php");
}
elseif($username == '')
{
header("Location:index.php");
}
else
die ("<body><div class='container'><p class='error'>Invalid username or password.</p></div></body>");
if ($username == "" || $token == "")
{
echo "<body><div class='container'><p class='error'>Please enter your username and password</p></div></body>";
}
else
{
$query = "SELECT * FROM members WHERE username='$username'AND password = '$token'"; //Look in table for username entered
$result = mysql_query($query);
if (!$result)
die ("Database access failed: " . mysql_error());
elseif (mysql_num_rows($result) > 0)
{
$row = mysql_fetch_row($result);
$_SESSION['username'] = $username; //Set session variables
$_SESSION['password'] = $token;
$fName = $row[0];
}
}
?>
1 votes
Qu'est-ce que
header.php
ressembler ?2 votes
Lieu
include_once 'header.php';
après leif ($username...
chaîne if/else afin que les en-têtes de redirection ne soient pas appelés après la sortie de l'en-tête HTML.2 votes
En supposant qu'il n'y a pas d'espace avant le < ? dans le fichier que vous avez listé, il y a une sortie qui se produit dans le fichier header.php, intentionnelle ou non. Si header.php est censé produire une sortie, vous devez placer la condition de connexion avant d'inclure header.php, sinon vous devrez éliminer toute sortie créée dans le fichier header.php. Les coupables les plus probables, d'après mon expérience, sont les espaces blancs supplémentaires soit avant la balise d'ouverture < ? soit après la balise de fermeture ?>. Il est certain que si vous ne voyez pas de caractères avant l'erreur, c'est que vous recherchez un espace blanc.
0 votes
Merci pour les réponses. J'ai déplacé l'en-tête include sous le headers() et je n'ai plus d'erreurs. Cependant, le fichier d'en-tête inclut les options de menu pour chaque emplacement, et comme j'ai déplacé l'en-tête include sous les en-têtes(), les options de menu ne changent pas.
1 votes
stackoverflow.com/search?q=headers+already+sent
0 votes
\
~~fichier ENCODING ne devrait pas êtreUTF-8
maisUTF-8 (Without BOM)
~~~