IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

headers already sent by


Sujet :

Langage PHP

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2010
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut headers already sent by
    j ai toujours cette message d'erreur 'Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\bci\tete.php:6) in c:\program files\easyphp1-8\www\bci\connexion.php on line 55'
    Merci d'avoir m'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    <?php include("tete.php"); ?>
                     <div class="art-content">
              <div class="art-Post">
                <div class="art-Post-body">
                  <div class="art-Post-inner">
                <br><br>            
    <p class="title">Connexion</p>
    <h4>Cette page vous permet de vous connecter en tant que un opérateur ou un administrateur</h4>
    <form action="index.php" method="post" >
    <?php if(isset($_COOKIE["PSEUDO"])){
    ?>
    <input type="button" name="deco" value="deconnexion" onClick="location.href='deconnexion.php'" class="bot">
        <?php } ?><br>
    Pseudo: <input type="text" name="pseudo" /><br /><br />
    Mot de passe:<input type="password" name="pwd" value=""/><br /><br />
    <input type="submit" value="Se connecter" class="bot"><br />
     
    <br><br><br>
    <?php
    if (isset($_POST['pseudo']) AND isset($_POST['pwd'])){
    if ($_POST['pseudo'] != NULL AND $_POST['pwd'] != NULL){
     $pseudo = htmlentities ($_POST['pseudo']);
      $pwd = htmlentities ($_POST['pwd']);
    mysql_connect("localhost", "root", " ") ;
    mysql_select_db("stage");
    $res1 = mysql_query("select * from operateurs;");
    while($tab = mysql_fetch_array($res1) AND ($pseudo != $tab['pseudo']) AND ($pwd != $tab['pwd']));
    if(($pseudo == $tab['pseudo']) AND ($pwd == $tab['pwd'])){
    setcookie("PSEUDO", $tab["pseudo"], time()+3600, "/");
            header('Location: index.php');
            }
            else ?>  <script type="text/javascript"> alert( 'le pseudo ou/et mot de passe n\'existe(s) pas');
            </script> 
            <?php } 
            }
    ?>
     
                <?php if(isset($_COOKIE["ADMIN"])){
                ?>
     
     
                      <?php } ?>
          <br><br><br><br>
          <?php if(isset($_COOKIE["ADMIN"])){
                ?>
     
     
    </form>
    <br><br><br>
    <?php
    if (isset($_POST['pwd'])){
    if ($_POST['pwd'] != NULL){
      $pwd = $_POST['pwd'];
    mysql_connect("localhost", "root", "");
    mysql_select_db("stage");
    $res1 = mysql_query("select * from admin;");
    while($tab = mysql_fetch_array($res1))
    if($pwd == $tab['pwd']){
    setcookie("ADMIN", $tab["pwd"], time()+3600, "/");
            header("Location: index.php");
            }
            else 
            echo 'le mot de passe n\'existe pas';
             } 
            }
    ?>   <?php } ?> <br><br><br>
    <br><br><br><br><br><br>
    <br>
     
                    <div class="cleared"></div>
                  </div>
                </div>
              </div>
              <?php include("bas.php");?>

  2. #2
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Par définition la fonction header() doit s'utiliser AVANT d'avoir envoyé au navigateur client le mondre contenu (texte, html...). Tu dois te débrouiller pour, par exemple, faire des header() au début de ton code uniquement
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2010
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2010
    Messages : 77
    Points : 92
    Points
    92
    Par défaut
    ça veut dire qu'il ne faut avant ce header ne pas faire la moindre mise en page! Ce que tu fais. Comme dis au dessus le header ne doit pas etre au milieu.
    A la limite met ceci ça fera l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?
    echo '<script language="Javascript">
    <!--
    document.location.replace("$www");
    // -->
    </script>';
    ?>

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 156
    Points : 160
    Points
    160
    Par défaut
    Le header ne gène pas dans le code qu'il a posté, l'erreur est ailleurs, car il exécute le header a la suite d'une requête donc dans le principe rien n'a encore été envoyé par le serveur...

  5. #5
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par Ze AzAr Voir le message
    Le header ne gène pas dans le code qu'il a posté, l'erreur est ailleurs, car il exécute le header a la suite d'une requête donc dans le principe rien n'a encore été envoyé par le serveur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     <div class="art-content">
              <div class="art-Post">
                <div class="art-Post-body">
                  <div class="art-Post-inner">
                <br><br>
     
    (...)
    header('Location: index.php');
    On a donc du contenu envoyé au client avant le header, sans gestion du buffer de sortie pour corriger ça. D'après le code posté, le header() gène dans le code. après sans indentation correcte, difficile de savoir si c'est celui là qui cloche, mais dans tous les cas ce code est incorrect)
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

  6. #6
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Bonjour,

    Concrètement, comme tu as deux blocs de test qui aboutissent sur une redirection, pourquoi ne pas les mettre avant include("tete.php"); ?
    Il s'agit des deux blocs suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        if (isset($_POST['pseudo']) AND isset($_POST['pwd'])){
            if ($_POST['pseudo'] != NULL AND $_POST['pwd'] != NULL){
                $pseudo = htmlentities ($_POST['pseudo']);
                $pwd = htmlentities ($_POST['pwd']);
                mysql_connect("localhost", "root", " ") ;
                mysql_select_db("stage");
                $res1 = mysql_query("select * from operateurs;");
                while($tab = mysql_fetch_array($res1) AND ($pseudo != $tab['pseudo']) AND ($pwd != $tab['pwd']));
                if(($pseudo == $tab['pseudo']) AND ($pwd == $tab['pwd'])){
                    setcookie("PSEUDO", $tab["pseudo"], time()+3600, "/");
                    header('Location: index.php');
                }
                else 
                    echo "<script type='text/javascript'> alert( 'le pseudo ou/et mot de passe n\'existe(s) pas');</script>";
            } 
        }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
        if (isset($_POST['pwd'])){
            if ($_POST['pwd'] != NULL){
                $pwd = $_POST['pwd'];
                mysql_connect("localhost", "root", "");
                mysql_select_db("stage");
                $res1 = mysql_query("select * from admin;");
                while($tab = mysql_fetch_array($res1))
                if($pwd == $tab['pwd']){
                    setcookie("ADMIN", $tab["pwd"], time()+3600, "/");
                    header("Location: index.php");
                }
                else 
                    echo 'le mot de passe n\'existe pas';
            } 
        }
    Ainsi, ton code ressemblerait à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    <?php
        if (isset($_POST['pseudo']) AND isset($_POST['pwd'])){
            if ($_POST['pseudo'] != NULL AND $_POST['pwd'] != NULL){
                $pseudo = htmlentities ($_POST['pseudo']);
                $pwd = htmlentities ($_POST['pwd']);
                mysql_connect("localhost", "root", " ") ;
                mysql_select_db("stage");
                $res1 = mysql_query("select * from operateurs;");
                while($tab = mysql_fetch_array($res1) AND ($pseudo != $tab['pseudo']) AND ($pwd != $tab['pwd']));
                if(($pseudo == $tab['pseudo']) AND ($pwd == $tab['pwd'])){
                    setcookie("PSEUDO", $tab["pseudo"], time()+3600, "/");
                    header('Location: index.php');
                }
                else 
                    echo "<script type='text/javascript'> alert( 'le pseudo ou/et mot de passe n\'existe(s) pas');</script>";
            } 
        }
     
        if (isset($_POST['pwd'])){
            if ($_POST['pwd'] != NULL){
                $pwd = $_POST['pwd'];
                mysql_connect("localhost", "root", "");
                mysql_select_db("stage");
                $res1 = mysql_query("select * from admin;");
                while($tab = mysql_fetch_array($res1))
                if($pwd == $tab['pwd']){
                    setcookie("ADMIN", $tab["pwd"], time()+3600, "/");
                    header("Location: index.php");
                }
                else 
                    echo 'le mot de passe n\'existe pas';
            } 
        }
     
        include("tete.php"); 
    ?>
    <div class="art-content">
        <div class="art-Post">
            <div class="art-Post-body">
                <div class="art-Post-inner">
                    <br><br>            
                    <p class="title">Connexion</p>
                    <h4>Cette page vous permet de vous connecter en tant que un opérateur ou un administrateur</h4>
                    <form action="index.php" method="post" >
                        <?php if(isset($_COOKIE["PSEUDO"])){ ?>
                        <input type="button" name="deco" value="deconnexion" onClick="location.href='deconnexion.php'" class="bot">
                        <?php } ?><br>
                        Pseudo: <input type="text" name="pseudo" /><br /><br />
                        Mot de passe:<input type="password" name="pwd" value=""/><br /><br />
                        <input type="submit" value="Se connecter" class="bot"><br />
                        <br><br><br>
                    </form>
                    <br><br><br>
                    <br><br><br>
                    <br><br><br><br><br><br>
                    <br>
                    <div class="cleared"></div>
                </div>
            </div>
        </div>
    <?php include("bas.php");?>
    ... avec quelques corrections de ta part.

    Bien cordialement,
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 156
    Points : 160
    Points
    160
    Par défaut
    en fait pas fait gaffe dans l'ordre du code...

    Et vu que j'ai l'habitude d'extérioriser sur le coup j'ai pas fait gaffe...

    Le code ne gêne pas réellement dans la construction, c'est dans le placement...

    tu dois passer tes conditions tout en haut de la page... de manière a ce que quand la requête est envoyé et au moment des test ta page n'a encore rien affiché donc le header ne génera pas... sinon le include est le plus propre...

    (désolé Halleck, Lundi matin, pas encore bien réveillé )

    J'opterais pour une solution qui se rapproche de Mahefasoa et comme il t'a dit, c'est juste un début a améliorer selon ton code

  8. #8
    Membre confirmé Avatar de rikemSen
    Homme Profil pro
    Analyste Développeur Web - Fizzup.com
    Inscrit en
    Décembre 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste Développeur Web - Fizzup.com
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 387
    Points : 540
    Points
    540
    Par défaut
    Ou alors ne pas te faire chier et utiliser:

    AU TOUT DEBUT (avant session_start() si tu as):

    ob_start();

    puis tout à la fin de la page (vraiment la dernière ligne hein...)

    ob_end_flush();

    Et pouf, ça marche.
    Si ce que tu as à dire n'est pas plus beau que le silence, alors tais toi.

    - Pensez à voter pour les messages qui vous ont été utiles ainsi que de mettre

  9. #9
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Points : 878
    Points
    878
    Par défaut
    Citation Envoyé par radicaldreamer Voir le message
    Ou alors ne pas te faire chier et utiliser:

    AU TOUT DEBUT (avant session_start() si tu as):

    ob_start();

    puis tout à la fin de la page (vraiment la dernière ligne hein...)

    ob_end_flush();

    Et pouf, ça marche.
    Ca peut être une idée, mais gare aux fausses bonne idées .

    Déjà pour comprendre, les fonction ob_* capture le flux sortant, c'est à dire ce que PHP/Apache envoie au navigateur.

    EN faisasnt un ob_start(à, tu stoppe le flux et tu le stocke en mémoire (donc c'est très gourmand), puis avec un ob_end_flush() (pas indispensable au passage, PHP le fera tout seul) tu libère cette mémoire et tu envoies le contenu. Donc tu peux entre temps faire des header() sans craindre les warnings, puisque rien n'a été envoyé au navigateur.

    Ca parait bien (je l'ai longtemps utilisé), mais c'est en fait plutôt à éviter à mon avis :
    • c'est très gourmand
    • si les fonction headers_list(), header_sent()... existent c'est justement pour traiter ce genre de cas
    • il vaut mieux prendre l'habitude de séparer le code PHP du code html (avec un modèle MVC par exemple, ou en mettant le PHP en haut et le HTML en bas...)
    • par contre une fois qu'on maîtrise mieux PHP, là ca devient une bonne idée de l'utiliser occasionnellement (par exemple quand tu fais un print_r($tableau, true) c'est ce qui se passe)
    Zend PHP Certified Engineer, Certifié Symfony2
    blog : blog.lepine.pro
    Secrétaire de l'AFUP (Association des Utilisateurs de PHP)

Discussions similaires

  1. [PHP-JS] problème headers already sent
    Par charlene44 dans le forum Langage
    Réponses: 12
    Dernier message: 14/06/2006, 13h55
  2. Réponses: 11
    Dernier message: 11/05/2006, 11h16
  3. [Cookies] cookies et 'headers already sent'
    Par wellser dans le forum Langage
    Réponses: 5
    Dernier message: 26/04/2006, 13h37
  4. [Cookies] Warning : headers already sent
    Par arti2004 dans le forum Langage
    Réponses: 8
    Dernier message: 04/04/2006, 16h31
  5. [JpGraph] Header already sent
    Par grunk dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/02/2006, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo