WARNING header chez free

Résolu
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. 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. J'ai d'autres header:location sur les autres pages, je dois tout remplacer par ta solution?
      0
    2. 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. Et tu sais pourquoi cela fonctionne sous EasyPHP mais pas sur Free? Juste par curiosité.
      0
    4. 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. ok ben c'est noté, encore merci!
      0
  2. Ben si c'est tout situé dans le même dossier, que j'ai appelé "admin".
    0
    1. 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
  3. Bonjour!

    Javascript pourquoi pas, je veux juste que ça fonctionne. Mes headers n'ont pas de problèmes avec EasyPHP!
    0
    1. 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
  4. 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
    1. 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
      1. 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
        1. 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
          1. 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. 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
          2. 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
            1. Alors tu as du texte affiché avant l'appelle à session_start() (ou header(), et ça doit faire pareil avec setcookie()).
              0
              1. J'ai également des problèmes de WARNING avec session_start();
                0
                1. 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
                  1. 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