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

Bibliothèques et frameworks PHP Discussion :

[FPDF] fpdf : Cannot modify header information - headers already sent by (output started a


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [FPDF] fpdf : Cannot modify header information - headers already sent by (output started a
    Bonjour bonjour !!!

    Voila voila je suis sur un projte de gestion de devis en ligne et je suis face a un gros probleme. Ca fait une jounrée que je suis dessus sans trouver de solution donc je me tourne vers vous , peut etre mes sauveurs

    alors j'ai deux fichiers.

    Le premier : generdev.php

    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
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    <html>
    <head>
    <title> G?rateur de Devis </title>
    <link rel="stylesheet" href="style_dev.css" type="text/css" />
    </head>
    <body>
    <center>
    <div class="global">
    <?php
    if( isset($_POST['raisoc_ent']) && $_POST['raisoc_ent'] != null && 
    isset($_POST['codepos_ent']) && $_POST['codepos_ent'] != null &&
    isset($_POST['ville_ent']) && $_POST['ville_ent'] != null &&
    isset($_POST['nom_resp']) && $_POST['nom_resp'] != null &&
    isset($_POST['prenom_resp']) && $_POST['prenom_resp'] != null &&
    isset($_POST['tel_resp']) && $_POST['tel_resp'] != null &&
    isset($_POST['mail_resp']) && $_POST['mail_resp'] != null &&
    isset($_POST['typeforma']) && $_POST['typeforma'] != null &&
    isset($_POST['villeforma']) && $_POST['villeforma'] != null &&
    isset($_POST['nombrepart']) && $_POST['nombrepart'] != null)
    { 
    include('exsstinit.php');
    }
    else
    {
    ?>	
    <form method="POST" > 
    <!-- ENTREPRISE --------------------------->
    <br />
    <center><h3>G?rateur de Devis en-ligne - FORMATIONS INTER </h3></center>
    <? echo "Tous les champs sont obligatoires..."; // sinon il fous ca au dessus du formulaire !!! ?>
    <center>
    <fieldset size="500"><legend><b>ENTREPRISE</b></legend>
    <table>
     
    <tr>
    <td>Raison sociale : </td>
    <td>
    <INPUT type=text name="raisoc_ent" size="20" value=<? echo $_POST['raisoc_ent'];?>></td>
    </tr>
     
    <tr>
    <td>Code Postal: </td>
    <td>
    <INPUT type=text name="codepos_ent" size="20" value=<? echo $_POST['codepos_ent'];?>></td>
     
    <td><center>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ville :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</center> </td>
    <td>
    <INPUT type=text name="ville_ent" size="20" value=<? echo $_POST['ville_ent'];?>></td>
    </tr>
     
    </table>
    </fieldset>
    <br />
    <br />
    <fieldset><legend><b>RESPONSABLE DE L INSCRIPTION</b></legend>
    <table>
    <tr>
    <td>Nom:</td>
    <td>
    <INPUT type=text name="nom_resp" size="20" value=<? echo $_POST['nom_resp'];?>></td>
    <td><center>Pr?m:</center></td>
    <td>
    <INPUT type=text name="prenom_resp" size="20" value=<? echo $_POST['prenom_resp'];?>></td>
    </tr>
    <tr>
    <td>T?phone:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
    <td>
    <INPUT type=text name="tel_resp" size="20" value=<? echo $_POST['tel_resp'];?>></td>
    <td>adresse e-mail:</td>
    <td>
    <INPUT type=text name="mail_resp" size="20" value=<? echo $_POST['mail_resp'];?>>
    </td>
    </tr>
    </table>
    </fieldset>
    <br />
    <br />
    <fieldset><legend><b>FORMATION</b></legend>
    <table>
    <tr>
    	<td>type de formation :</td>
    	<td>
    		<SELECT name="typeforma">
    			<OPTION VALUE="0">choix formation</OPTION>
    			<OPTION VALUE="formation SST-Initial">SST-Initial</OPTION>
    			<OPTION VALUE="formation SST-Recyclage">SST-Recyclage</OPTION>
    			<OPTION VALUE="formation CHSCT-Initial">CHSCT-Initial</OPTION>
    			<OPTION VALUE="formation CHSCT-Recyclage">CHSCT-Recyclage</OPTION>
    		</SELECT>
    	</td>
    	<td>&nbsp;&nbsp;&nbsp;&nbsp;Villes :</td>
    	<td>
    		<SELECT name="villeforma">
    			<OPTION VALUE="v0" >choix ville</OPTION>
    			<OPTION VALUE="Bordeaux">Bordeaux</OPTION>
    			<OPTION VALUE="Grenoble">Grenoble</OPTION>
    			<OPTION VALUE="Lyon">Lyon</OPTION>
    			<OPTION VALUE="Lille">Lille</OPTION>
    			<OPTION VALUE="Marseille">Marseille</OPTION>
    			<OPTION VALUE="Metz/Nancy">Metz/Nancy</OPTION>
    			<OPTION VALUE="Montpellier">Montpellier</OPTION>
    			<OPTION VALUE="Nantes">Nantes</OPTION>
    			<OPTION VALUE="Nice">Nice</OPTION>
    			<OPTION VALUE="Paris">Paris</OPTION>
    			<OPTION VALUE="Rennes">Rennes</OPTION>
    			<OPTION VALUE="Strasbourg">Strasbourg</OPTION>
    			<OPTION VALUE="Toulouse">Toulouse</OPTION>
    		</SELECT>
    	</td>
    </tr>
    <tr>
    	<td>nombre de participants:</td>
     
    	<td>
    	<SELECT name="nombrepart">
    			<OPTION VALUE="1">1</OPTION>
    			<OPTION VALUE="2">2</OPTION>
    			<OPTION VALUE="3">3</OPTION>
    			<OPTION VALUE="4">4</OPTION>
    			<OPTION VALUE="5">5</OPTION>
    			<OPTION VALUE="6">6</OPTION>
    			<OPTION VALUE="7">7</OPTION>
    			<OPTION VALUE="8">8</OPTION>
    			<OPTION VALUE="9">9</OPTION>
    			<OPTION VALUE="10">10</OPTION>
    	</SELECT>
    	</td>
    </tr>
    </table>
    </fieldset>
    <br />
     
    <fieldset>
    <legend><b>VALIDATION</b></legend>
    <table align="center">
    <TR>
    	<TD>
    	<INPUT type="submit" value="Valider et Obtenir mon devis">
    	</TD>
    	<TD>
    	<INPUT type="reset" value="Tout Annuler">
    	</TD>
    </TR>
    </table>
    <br />
     
     
    </fieldset>
    <br /><br /><br /><br /><br /><br /><br /><br />
     
     
     
    </center></center>
    </form>
    <?	
    }
    ?>
     
     
     
    </div>
    </body>
    </html>
    voila le fichier numéro 1 ! Celui ci permet la création d'un formulaire qui contient plusieurs champs. La génération de mon pdf marche très bien jusqu'a ce que j'ajoute une gestion d'erreur.

    En effet avant d'avoir mon erreur , le pdf se créait très bien. En fait avant cette gestion, l'action du formulaire était le fichier ex.php ( soit le traitement du pdf)
    alors que maintenant, l'action du formulaire est la meme fichier generdev.php et tnat que tous les champs ne sont pas existant et non vide, il recharge cette même page.
    Une fois que tous les champs sont complétés, a ce moment la il passe dans la premiere partie du code soit le

    include('exsstinit.php');

    je pense que le souci vient de la.

    Mon erreur précise est :

    Warning: Cannot modify header information - headers already sent by (output started at C:\xampplite\htdocs\generdev\generdevsstinit\generdev.php:10) in C:\xampplite\htdocs\generdev\generdevsstinit\fpdf.php on line 1017
    FPDF error: Some data has already been output, can't send PDF file


    donc je ne comprend pas comment faire en fait. A la ligne 1017, on crée un header donc je suppose que cela pose un conflit avec le header html.

    Je ne sais pas résoudre ce problème, je rame depuis des heures et des heures, peut etre est-ce l'idée qu'il me manque. Si vous pouviez m'aidez je vous en serait très reconaissant.


    voici le 2eme fichier a titre indicatif :

    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
     
    <?php
    require('invoice.php');
    ob_end_clean();
    $pdf = new PDF_Invoice( 'P', 'mm', 'A4' );
    $pdf->AddPage();
    $pdf->addSociete( "Siège Social:\n","ENT\n".
                      "65, Avenue lecal Briand\n" .
                      "92350 Paris\n\n"."Tél : 01 57 21 86 90\n"."Fax : 01 57 21 86 59\n\n"."SARL au capital de 7600 €uros"
    				  );
    $pdf->fact_dev( "DEVIS ", "Formation" );
    $pdf->temporaire( "D E V I" );
    $pdf->addDate( "03/12/2003");
    $pdf->addPageNumber("1");
    $pdf->addClientAdresse("Ste " . $_POST[raisoc_ent] . "\nM. ". $_POST[prenom_resp] ." ". $_POST[nom_resp] . "\n" .$_POST[mail_resp] . "\n". $_POST[codepos_ent] . " " . $_POST[ville_ent] ."\nTel: " . $_POST[tel_resp]);
    $cols=array( "DESIGNATION"  => 78,
                 "Nb Participant"     => 25,
                 "Nb d'heures"      => 26,
                 "Prix HT/stagiaire" => 30,
                 "Montant HT"          => 25 );
    $pdf->addCols( $cols);
    $cols=array( "FORMATION - LIEU"  => "L",
                 "Nb Participant"     => "C",
                 "Nb d'heures"      => "R",
                 "Prix HT/stagiaire" => "R",
                 "Montant HT"          => "C" );
    $pdf->addLineFormat($cols);
    //$pdf->addLineFormat($cols);
    $y    = 120;
    $line = array( "DESIGNATION"  => "Prestation " . $_POST[typeforma]." - ".$_POST[villeforma] ,
                   "Nb Participant"     => $_POST[nombrepart] ,
                   "Nb d'heures"      => "14 ( 2 jours )",
                   "Prix HT/stagiaire" => "260 €",
                   "Montant HT"        => 260*$_POST[nombrepart] );
    $size = $pdf->addLine( $y, $line );
    $y   += $size + 2;
    $pdf->addCadreTVAs();
    $tot_prods = array( array ( "px_unit" => 260, "qte" => $_POST[nombrepart] , "tva" => 1 )
                        );
    $tab_tva = array( "1"       => 19.6,
                      "2"       => 5.5);
    $params  = array( "RemiseGlobale" => 0,
                          "remise_tva"     => 0,       // {la remise s'applique sur ce code TVA}
                          "remise"         => 0,       // {montant de la remise}
                          "remise_percent" => 0,      // {pourcentage de remise sur ce montant de TVA}
                      "FraisPort"     => 1,
                          "portTTC"        => 0,      // montant des frais de ports TTC
                                                       // par defaut la TVA = 19.6 %
                          "portHT"         => 0,       // montant des frais de ports HT
                          "portTVA"        => 1,    // valeur de la TVA a appliquer sur le montant HT
                      "AccompteExige" => 1,
                          "accompte"         => 0,     // montant de l'acompte (TTC)
                          "accompte_percent" => 0,    // pourcentage d'acompte (TTC)
                      "Remarque" => "Aucun acompte" );
    $pdf->addTVAs( $params, $tab_tva, $tot_prods);
    $pdf->addCadreEurosFrancs();
    $pdf->Output();
    exit();
    ?>

  2. #2
    Membre confirmé
    Avatar de Tesing
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 453
    Points
    453
    Par défaut
    Salut,

    la librairie fpdf ne peut pas envoyer les en-têtes HTTP avec le type MIME correspondant à un PDF car ils sont envoyé implicitement au début du fichier generdev.php qui commence par du contenu textuel.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A 
    <?php // le A a provoqué l'envoi des en têtes HTTP donc ce qui suit ne marchera pas :
    header('Location: index.php');
    ?>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php 
    header('Location: index.php'); //la ca marche et le A ne sera donc pas affiché
    ?>
    A
    L'idée est donc, dans ton script, de vérifier si les données sont bien présentes et dans ce cas de générer le PDF avant qu'il y ait du contenu HTML.
    Keep it simple, stupid !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    je ne suis sur de bien comprendre. Dis moi si je me trompe.


    Le problème est que j'ai besoin des donnée récupérées du formulaires pour pouvoir lancer la création du pdf, en effet mon pdf se construit avec ces variables récupérées donc si je ne récupère pas l'html avant cela ne foncionnera pas.

    De puis je ne comprend pas très bien le but du header, il s'agit d'une redirection je pense mais je ne voi pas l'interet.

    cela ne fonctionne pas avec le include('exsstinit.php') ???


    merci encore pour ta réponse

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    bon ce que j'ai fait c'est que j'ai placé mon premier if avant meme les balise html donc ca a marché

    merci pour ton aide !!!!!! tu assure chaussure

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2009, 22h27
  2. header alredy sent by (output started
    Par King_T dans le forum Langage
    Réponses: 11
    Dernier message: 13/05/2008, 19h51
  3. Réponses: 1
    Dernier message: 17/07/2007, 11h49
  4. Réponses: 4
    Dernier message: 16/07/2007, 13h42
  5. Réponses: 5
    Dernier message: 04/09/2006, 15h13

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