[PHP] Problème headers already sent by

Résolu
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

  1. Il ne doit pas y avoir de texte sortant avant l'appel à la fonction header().
    1. Oui, je sais, mais je n'ai aucune fonction echo avant l'header ici...
    2. 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.
    3. 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 ... ?> ...
    4. Si ce script est placé en-dehors de <?php ... ?> avant la fonction header(), alors c'est ça qui pose problème
    5. 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 :) !