[PHP] Problème headers already sent by

Résolu/Fermé
gautordi0101 Messages postés 20 Date d'inscription dimanche 18 avril 2010 Statut Membre Dernière intervention 8 septembre 2010 - Modifié par gautordi0101 le 10/06/2010 à 18:51
gautordi0101 Messages postés 20 Date d'inscription dimanche 18 avril 2010 Statut Membre Dernière intervention 8 septembre 2010 - 12 juin 2010 à 13:57
Bonjour à tous,

J'ai un problème avec un script PHP et je ne comprends pas d'où vient l'erreur...

Voici le code d'erreur retourné par PHP :
Warning: Cannot modify header information - headers already sent by (output started at F:\Server\www\PHP\site_test\v2\overall_header.php:300) in F:\Server\www\PHP\site_test\v2\profile.php on line 23  


Voici le bout du code où est située l'erreur (fichier profile.php ; lignes 4 à 28) :
if(!empty($_GET["id"])) {  
  $get_id = htmlspecialchars($_GET["id"]);  
  mysql_connect("".$db_server."", "".$db_username."", "".$db_passwd."");  
  mysql_select_db("".$db_database."");  
  $query_identify = mysql_query("SELECT * FROM ".$db_tables_prefix."userdata WHERE user_id='".$get_id."'") or die ("<p>Erreur SQL générale.<br />Contactez l'administrateur du site ou du serveur.</p>");  
  if (mysql_num_rows($query_identify) != 1) {  
   header ("Location: error.php?user_unknown");  
  }  
  $db_reply = mysql_query("SELECT * FROM ".$db_tables_prefix."userdata WHERE user_name = '".$_COOKIE["".$cookie_name.""]."'") or die ("<p>Erreur SQL générale.<br />Contactez l'administrateur du site ou du serveur.</p>");  
  while ($data = mysql_fetch_array($db_reply))  
  {  
   $user_logged_id = $data['user_id'];  
  }  
  $db_reply2 = mysql_query("SELECT * FROM ".$db_tables_prefix."userdata WHERE user_id = '".$get_id."'") or die ("<p>Erreur SQL générale.<br />Contactez l'administrateur du site ou du serveur.</p>");  
  while ($data2 = mysql_fetch_array($db_reply2))  
  {  
   $user_id = $data2['user_id'];  
   $account_status = $data2['account_status'];  
   if($user_logged_id == $user_id) {  
    header ("Location: my_profile.php"); //ligne 23 ! 
   }  
   if($account_status != 1) {  
    header ("Location: error.php?user_unavailable");  
   }  
  }
...  


Merci à tous ceux qui trouveraient une solution ;D



1 réponse

avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
10 juin 2010 à 19:20
Il ne doit pas y avoir de texte sortant avant l'appel à la fonction header().
1
gautordi0101 Messages postés 20 Date d'inscription dimanche 18 avril 2010 Statut Membre Dernière intervention 8 septembre 2010
10 juin 2010 à 19:28
Oui, je sais, mais je n'ai aucune fonction echo avant l'header ici...
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
10 juin 2010 à 19:31
Alors peut-être qu'il y a du texte en-dehors de "<?php ... ?>".
Si tu es en UTF-8, vérifie qu'il n'y ait pas le BOM.
0
gautordi0101 Messages postés 20 Date d'inscription dimanche 18 avril 2010 Statut Membre Dernière intervention 8 septembre 2010
10 juin 2010 à 19:37
Ben, je ne sais pas si ça peut être ça, mais j'ai un script js et c'est PHP via un $_SERVER["script_name"] qui détermine quel script charger (dans le fichier overall_header.php) :

<?php
	if (stristr($_SERVER["SCRIPT_NAME"], "my_profile.php")) {
		if(empty($_GET["view"])) {
?>
<script type="text/javascript">
function ajax()
{
obj = document.getElementById("earlier_msg");
obj.innerHTML = "";
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);

xhr_object.onreadystatechange = function()
{ 
if(xhr_object.readyState == 4)
{
if(xhr_object.status == 200) 
obj.innerHTML += "" + xhr_object.responseText; 
else 
obj.innerHTML += "Erreur &mdash; " + xhr_object.status;
}
}; 

xhr_object.open("GET", "ajax.php?query=my_profile", true);
xhr_object.send(null);
}
</script>
<?php
		}
		else {
			if($_GET["view"] == "other_msg") {
?>
<script type="text/javascript">
function ajax()
{
obj = document.getElementById("earlier_msg");
obj.innerHTML = "";
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);

xhr_object.onreadystatechange = function()
{ 
if(xhr_object.readyState == 4)
{
if(xhr_object.status == 200) 
obj.innerHTML += "" + xhr_object.responseText; 
else 
obj.innerHTML += "Erreur &mdash; " + xhr_object.status;
}
}; 

xhr_object.open("GET", "ajax.php?query=my_msg", true);
xhr_object.send(null);
}
</script>
<?php
			}
		}
	}
	if (stristr($_SERVER["SCRIPT_NAME"], "profile.php")) {
		if(empty($_GET["view"])) {
			if(isset($_GET["id"])) {
				$get_user_id = htmlspecialchars($_GET["id"]);
?>
<script type="text/javascript">
function ajax()
{
obj = document.getElementById("earlier_msg");
obj.innerHTML = "";
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);

xhr_object.onreadystatechange = function()
{ 
if(xhr_object.readyState == 4)
{
if(xhr_object.status == 200) 
obj.innerHTML += "" + xhr_object.responseText; 
else 
obj.innerHTML += "Erreur &mdash; " + xhr_object.status;
}
}; 

xhr_object.open("GET", "ajax.php?query=profile&user_id=<?php echo $get_user_id; ?>", true);
xhr_object.send(null);
}
</script>
<?php
			}
		}
		else {
			if($_GET["view"] == "other_msg") {
				if(isset($_GET["id"])) {
					$get_user_id = htmlspecialchars($_GET["id"]);
?>
<script type="text/javascript">
function ajax()
{
obj = document.getElementById("earlier_msg");
obj.innerHTML = "";
if(window.XMLHttpRequest) // FIREFOX
xhr_object = new XMLHttpRequest();
else if(window.ActiveXObject) // IE
xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
else
return(false);

xhr_object.onreadystatechange = function()
{ 
if(xhr_object.readyState == 4)
{
if(xhr_object.status == 200) 
obj.innerHTML += "" + xhr_object.responseText; 
else 
obj.innerHTML += "Erreur &mdash; " + xhr_object.status;
}
}; 

xhr_object.open("GET", "ajax.php?query=msg&user_id=<?php echo $get_user_id; ?>", true);
xhr_object.send(null);
}
</script>
<?php
				}
			}
		}
	}
?>


Parce que sinon, je ne vois pas d'autre code (ou texte, qui a besoin des variables) en dehors de <?php ... ?> ...
0
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
10 juin 2010 à 20:55
Si ce script est placé en-dehors de <?php ... ?> avant la fonction header(), alors c'est ça qui pose problème
0
gautordi0101 Messages postés 20 Date d'inscription dimanche 18 avril 2010 Statut Membre Dernière intervention 8 septembre 2010
12 juin 2010 à 13:57
Oui, c'était bien cela qui buggait.
J'utilisais un script PHP qui analysait l'URL de la page en cours pour activer ou pas un JS...
Cela bloquait le header...
J'ai réussit à le corriger :).

Merci beaucoup à toi, avion-f16 :) !
0