[PHP] Problème headers already sent by

Résolu
gautordi0101 Messages postés 20 Statut Membre -  
gautordi0101 Messages postés 20 Statut Membre -
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. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Il ne doit pas y avoir de texte sortant avant l'appel à la fonction header().
    1
    1. gautordi0101 Messages postés 20 Statut Membre
       
      Oui, je sais, mais je n'ai aucune fonction echo avant l'header ici...
      0
    2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      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
    3. gautordi0101 Messages postés 20 Statut Membre
       
      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
    4. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      Si ce script est placé en-dehors de <?php ... ?> avant la fonction header(), alors c'est ça qui pose problème
      0
    5. gautordi0101 Messages postés 20 Statut Membre
       
      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