WARNING header chez free

Résolu
Lucie -  
 Lucie -
Bonjour,

Alors je viens de tester mon site sur FREE. Mais j'ai ce problème lorsque je m'identifie:

Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sdc/9/f/mywebsite/test/admin/init.php:70) in /mnt/169/sdc/9/f/mywebsite/test/admin/ on testlogadmin.php line 38 


Voilà ce qu'il y a à la ligne 38 de ma page testlogadmin.php:

  
34.   if ($passB == "admin"){ 
35.   //header('location:definir_pass.php'); 
36.  } 
37.  else if ($statut == "admin"){ 
38.   header('location:index_admin.php');        
39.  } 
40.  else{ 
41.   header('location:log_admin.php'); 
42. } 
43. } 
44. else 
41. { 
46.  header('location:log_admin.php'); 
47. } 
48. mysql_close();  
49. ?>


De l'aide?

13 réponses

  1. briiiiix Messages postés 624 Statut Membre 18
     
    Ici
    Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sdc/9/f/mywebsite/test/admin/init.php:70) in /mnt/169/sdc/9/f/mywebsite/test/admin/testlogadmin.php on line 38

    Le message est clair, il y a un code qui renvoi du html à la ligne 38 tel que echo, print, ou même un code html brut, il faut l'enlever
    1
  2. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Il y a du texte qui sort avant l'appel à la fonction header().
    Si tu es en UTF-8, vérifie que ce soit « sans BOM ».
    0
  3. Lucie
     
    J'ai vérifié, UFT-8 SANS BOM, mais toujours l'erreur suivante:

    Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sdc/9/f/mywebsite/test/admin/init.php:70) in /mnt/169/sdc/9/f/mywebsite/test/admin/testlogadmin.php on line 38


    Pourtant ça fonctionne parfaitement sous EasyPHP...
    0
  4. Lucie
     
    J'ai également des problèmes de WARNING avec session_start();
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Alors tu as du texte affiché avant l'appelle à session_start() (ou header(), et ça doit faire pareil avec setcookie()).
    0
  7. Lucie
     
    D'accord, j'ai pigé pour le session_start(), problème résolu.
    Mais toujours un problème avec mon header:

    26.if ($row=mysql_fetch_object($res)) 
    27.{ 
    28. $loginB=$row->login; 
    29. $passB=$row->password; 
    30. $_SESSION['sess_admin'] = "admin"; 
    31. $statut="admin"; 
    32.  
    33. header('location:index_admin.php'); 
    34.} 
    35.else 
    36.{ 
    37. header('location:log_admin.php'); 
    38.} 
    39.?>


    Erreur:

    Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sdc/9/f/mysiteweb/test/admin/init.php:70) in /mnt/169/sdc/9/f/mysiteweb/test/admin/testlogadmin.php on line 33


    Je vois pas quel problème il y a avec mon header.

    Et j'ai ce message quand je passe par mon else de la ligne 35:

    Warning: Cannot modify header information - headers already sent by (output started at /mnt/169/sdc/9/f/mysiteweb/test/admin/init.php:70) in /mnt/169/sdc/9/f/mysiteweb/test/admin/testlogadmin.php on line 37


    Voilà...
    0
    1. briiiiix Messages postés 624 Statut Membre 18
       
      Une question:
      La page qui contient ce code, est ce qu'elle contient d'autre codes ?
      Je voualais savoir si tu peux utiliser
      include ('index_admin.php');
      0
  8. Lucie
     
    Je comprends pas pourquoi mettre un include ('index_admin.php');

    Voilà ma page en entier:

    <?php
    session_start();
    
    require 'init.php';
    
    if (isset ($_POST['log']))
    {
    	$loginA=$_POST['log'];
    }
    
    if (isset ($_POST['mdp']))
    {
    	$passA=$_POST['mdp'];
    }
    
    $connect_db = connect(); 
    
    $req = "SELECT * FROM admin_tab WHERE login='$loginA' and mdp='$passA';";
    $res = mysql_query($req,$connect_db);
    
    if ($row=mysql_fetch_object($res))
    {
    	$loginB=$row->login;
    	$passB=$row->password;
    	$_SESSION['sess_admin'] = "admin";
    	$statut="admin";
    	
    	header('location:index_admin.php');
    }
    else
    {
    	header('location:log_admin.php');
    }
    ?>
    


    En gros je récupère le login et le mot de passe entré, je récupère le login et le mot de passe dans la base de données, s'il existe je redirige vers l'index, si non, je recharge la page servant à s'identifier.
    0
  9. briiiiix Messages postés 624 Statut Membre 18
     
    Pour ma part je te conseille d'include tes pages:

    <?php
    session_start();

    require 'init.php';
    $connect_db = connect();
    if (isset ($_POST['log']) && isset ($_POST['mdp']))
    {
    $loginA=$_POST['log'];
    $passA=$_POST['mdp'];

    $req = "SELECT * FROM admin_tab WHERE login='$loginA' and mdp='$passA';";
    $res = mysql_query($req,$connect_db);

    if ($row=mysql_fetch_object($res))
    {
    $loginB=$row->login;
    $passB=$row->password;
    $_SESSION['sess_admin'] = "admin";
    $statut="admin";

    include('index_admin.php');
    }
    else
    {
    include('log_admin.php');
    }

    }
    ?>

    Mais cette solution est seulement si le fichier init.php ne contient pas du html
    Autre chose, j'ai optimisé un peu tpon code.
    Reviens vers moi si tu veux une autre solution
    0
  10. Lucie
     
    Merci briiiiix.

    J'ai testé avec des include mais ça marche pas. C'est sensé servir de redirection aussi? Comme le header?

    Voilà les erreurs obtenues:

    Warning: main(location:index_admin.php) [function.main]: failed to open stream: No such file or directory in /mnt/169/sdc/9/f/mysiteweb/test/admin/testlogadmin.php on line 33
    
    Warning: main() [function.include]: Failed opening 'location:index_admin.php' for inclusion (include_path='/mnt/169/sdc/9/f/mysiteweb/include:.:/usr/php4/lib/php') in /mnt/169/sdc/9/f/mysiteweb/test/admin/testlogadmin.php on line 33


    J'arrête pour cette nuit, je reprends demain!

    Je veux bien voir le code optimisé, puis j'aimerai que ces redirections fonctionnent...

    Merci pour l'aide et à demain j'espère!

    Bonne nuit!
    0
  11. briiiiix Messages postés 624 Statut Membre 18
     
    C clair que tes fichiers index_admin.php et login_admin.php ne sont pas dans le même dossier du fichier contenant le code, est ce que tu veux une redirection a l'aide de javascript ?
    0
  12. Lucie
     
    Bonjour!

    Javascript pourquoi pas, je veux juste que ça fonctionne. Mes headers n'ont pas de problèmes avec EasyPHP!
    0
    1. briiiiix Messages postés 624 Statut Membre 18
       
      D'apres le dernier message d'erreur du code que je t'ai envoyé.

      Warning: main(location:index_admin.php) [function.main]: failed to open stream: No such file or directory in /mnt/169/sdc/9/f/mysiteweb/test/admin/testlogadmin.php on line 33

      le fichier index_admin.php n'est pas trouvé dans le même dossier que celui du fichier contenant le script.
      Commence par resoudre ça,, avant de pouvoir faire la redirection, puis revien vers moi
      0
  13. Lucie
     
    Ben si c'est tout situé dans le même dossier, que j'ai appelé "admin".
    0
    1. briiiiix Messages postés 624 Statut Membre 18
       
      Alors une solution un peu tirée par les cheveux mais qui fonctionne déjà:

      //*****************************************
      <?php
      session_start();

      require 'init.php';
      $connect_db = connect();
      if (isset ($_POST['log']) && isset ($_POST['mdp']))
      {
      $loginA=$_POST['log'];
      $passA=$_POST['mdp'];

      $req = "SELECT * FROM admin_tab WHERE login='$loginA' and mdp='$passA';";
      $res = mysql_query($req,$connect_db);

      if ($row=mysql_fetch_object($res))
      {
      $loginB=$row->login;
      $passB=$row->password;
      $_SESSION['sess_admin'] = "admin";
      $statut="admin";?>
      <script>
      window.location = 'index_admin.php';
      </script>
      <?php }
      else
      {?>
      <script>
      window.location = 'login_admin.php';
      </script>
      <?php
      }

      }
      ?>

      //*************************
      Je repete, cette solution est maladroite mais qui tourne comme même
      0
  14. Lucie
     
    Oké, ça marche. Un peu loufoque mais ça marche.
    J'ai toujours pas compris pourquoi le header location ne fonctionnait pas, mais bon!
    C'est compliqué décidément!

    Merci beaucoup pour cette solution.

    J'ai encore des erreurs mais celles là je pense pouvoir les résoudre.
    0
    1. Lucie
       
      J'ai d'autres header:location sur les autres pages, je dois tout remplacer par ta solution?
      0
    2. briiiiix Messages postés 624 Statut Membre 18
       
      Du moment ou tu as une fonction qui genere du contenu sur la page située avant le header:location tu auras cette erreur, si tu veux d'autres solutions fais moi savoir, mais ça va te demander de modifier une grande partie de ton code
      0
    3. Lucie
       
      Et tu sais pourquoi cela fonctionne sous EasyPHP mais pas sur Free? Juste par curiosité.
      0
    4. briiiiix Messages postés 624 Statut Membre 18
       
      Oui parceque chez free il y a un contenu automatique géneré par leur serveur, donc évite la fonction header:location sur leure serveur
      0
    5. Lucie
       
      ok ben c'est noté, encore merci!
      0