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] Erreur : some data has already been output, can't send PDF file (output started at creation_livret.php:39)


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur réseaux
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Points : 101
    Points
    101
    Par défaut [FPDF] Erreur : some data has already been output, can't send PDF file (output started at creation_livret.php:39)
    Bonjour,
    Je sais, ce problème a été questionné et résolu moult reprises, mais j'ai essayé toutes les solutions et aucune ne fonctionne dans mon cas.

    Je bosse sur un projet pour générer un livret d'instruction PDF et j'ai donc créé un programme en local. Jusque ici tout va bien. Au moment de le mettre en ligne et d'essayer de générer un nouveau PDF, il affiche l'erreur suivante:

    FPDF error: Some data has already been output, can't send PDF file (output started at /chemin/vers/serveur/creation_livret.php:39)

    En voyant cette erreur, j'ai essayé de me documenter en trouvant de l'aide sur Internet et sur en allant dans des , rajouter dans le code le fameux , modifier les droits des fichiers, refaire le fichier complet en pensant qu'il y aurait des espaces ou caractères, séparer les deux fichiers puisque le fichier principal contient de l'HTML, enfin j'ai tout essayé mais rien n'a été résolu.

    Voici le code du fichier principal (creation_livret.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
    <?php
    	session_start();
    	try
    	{
    		$bdd = mysqli_connect('server', 'user', 'mdp', 'db');
    		mysqli_set_charset($bdd, "utf8");
    	}
    	catch(Exception $e)
    	{
    		die('Erreur : '. mysqli_connect_error());
    	}
    	if(empty($_SESSION['user']))
    	{
    		echo '<script>document.location.href = "connexion_pibobook.php"</script>';
    	}
    ?>
    <!DOCTYPE html>
    <html>
    	<head>
    		<title>Cr&eacute;ation des livrets d'instructions</title>
    		<link rel="stylesheet" type="text/css" href="accueil_interface.css" />
    	</head>
    	<body>
    		<div id="contenu">
    			<form method="post" action="" enctype="multipart/form-data" name="f1">
    				<fieldset>
    					<h3>Livret d'instructions - Formulaire</h3>
    					<p><select name="produits" onchange="document.f1.submit();">
    						<option>Choisir un produit</option>
    						<?php
    							$req_liste = 'SELECT * FROM produits';
    							$reponse_liste = mysqli_query($bdd,$req_liste);
    							while($datas_liste = mysqli_fetch_assoc($reponse_liste))
    							{
    						?>
    						<option value='<?php echo $datas_liste['id']; ?>' <?php if(isset($_POST['produits']) AND $_POST['produits'] == $datas_liste['id']){ echo "selected"; } ?>><?php echo $datas_liste['type_produit']; ?></option>
    						<?php
    							}
    							mysqli_free_result($reponse_liste);
    						?>
    					</select></p>
    					<p><label>Nom du document final : </label><input type="text" name="nom_doc_final" value="<?php if(isset($_POST['nom_doc_final'])){ echo $_POST['nom_doc_final']; }?>"/></p>
    					<?php
    						if(isset($_POST['produits']))
    						{
    							$id_outil = $_POST['produits'];
    						?>
    							<p><select name="documents[]" multiple="multiple" size="10">
    								<?php
    									$req_liste2 = 'SELECT * FROM num_produits_docs INNER JOIN documents ON documents.id = num_produits_docs.num_id_docs WHERE num_id_produits = '.$id_outil.' ORDER BY id_cat ASC';
    									$reponse_req_liste2 = mysqli_query($bdd,$req_liste2);
    									while($datas_liste2 = mysqli_fetch_assoc($reponse_req_liste2))
    									{
    										echo '<option value='.$datas_liste2['id'].' selected="selected">'.$datas_liste2['nom_doc'].'</option>';
    									}
    									mysqli_free_result($reponse_req_liste2);
    								?>
    							</select></p>
    						<?php
    							$req_produits = 'SELECT * FROM produits WHERE id='.$id_outil.'';
    							$reponse_produits = mysqli_query($bdd,$req_produits);
    							while($datas_produits = mysqli_fetch_assoc($reponse_produits))
    							{
    								$type_produit = utf8_decode($datas_produits['type_produit']);
    								$nom_type = utf8_decode($datas_produits['nom_type']);
    								$n_serie_produit = utf8_decode($datas_produits['n_serie_produit']);
    							}
     
    						}
     
    						if(isset($_POST['create']))
    						{
    							include('genere_livret_pdf.php');
    						}
    						mysqli_close($bdd);
     
    						function Footer()
    						{
    							//Position at 1.5 cm from bottom
    							$this->SetY(-15);
    							//Arial italic 8
    							$this->SetFont('Arial','I',8);
    							//Page number
    							$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    						}
     
    						?>
    					<p><input type="submit" name="create" value="Cr&eacute;er" /></p>
    				</fieldset>
    			</form>
    			<?php
    				include('RetourAccueil.php');
    				?>
    		</div>
    	</body>
    </html>

    Le code du fichier pour générer un nouveau PDF :

    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
    <?php
    	$nbPremPages = array();
     
    	$nom_doc_final = $_POST['nom_doc_final'];
    	$id_documents = $_POST['documents'];
    	$chemin2 = "livrets/".$nom_doc_final.".pdf";
    	$nom_doc_final2 = $nom_doc_final.".pdf";
     
    	$req_pre_insertion_livret = mysqli_prepare($bdd,'INSERT INTO livrets(nom_livret,chemin) VALUES(?,?)'); //pr걡rer la requ뵥 pour ins곥r le nouveau livret
    	mysqli_stmt_bind_param($req_pre_insertion_livret,"ss",$nom_doc_final2,$chemin2); //param굲er la requ뵥 avec les variables
    	if(mysqli_stmt_execute($req_pre_insertion_livret)) //exꤵter la requ뵥
    	{
    		$id_livret = mysqli_insert_id($bdd); //rꤵp곥r le dernier id inser鍊							}
    	}
    	//inclure ces fichiers pour la crꢴion des PDF
    	require_once('fpdf.php');
    	require_once('fpdi.php');
    	require_once('fpdf_tpl.php');
    	require_once('tables_matieres_class.php');
    	require_once('footer_livret_final.php');
     
    	$pdf = new PDF();
     
    	$iChapitres = 1;
    	foreach($id_documents as $valeur)
    	{
    		$req_document = 'SELECT * FROM documents WHERE id='.$valeur.'';
    		if($reponse_document = mysqli_query($bdd,$req_document))
    		{
    			while($datas_document = mysqli_fetch_assoc($reponse_document))
    			{
    				$nom_doc = $datas_document['nom_doc']; //rꤵp곥r le nom du document
    				$chemin = $datas_document['chemin']; //rꤵp곥r le chemin du document
    				$id_doc = $datas_document['id']; //rꤵp鳥 l'dentificateur unique du document
    				$titre = $datas_document['titre']; //rꤵp곥r le titre
    			}
    		}
    		else
    		{
    			echo "Erreur : ".mysqli_error($bdd);
    		}
     
    		$NbPage = $pdf->setSourceFile($chemin);
     
    		for($i = 1; $i <= $NbPage; $i++)
    		{
    			if($i == 1)
    			{
    				$titre_final = $iChapitres.".".utf8_decode($titre); //concatꯥr num곯 chapitres et titre
    				$pdf -> AddPage(); //rajouter une page
    				$nbPremPages[$pdf->PageNo()] = $titre_final;
     
    				$pdf->SetFont('Arial','','48'); //param굲er le titre
    				$pdf->Cell(100,30,$titre_final); //ꤲire le titre final
     
    				$tplIdx = $pdf->importPage($i); //importer la page
    				$pdf->useTemplate($tplIdx, 0,0,0,0,true); //utiliser le mod魥
    			}
    			else
    			{
    				$tplIdx = $pdf->importPage($i);
     
    				$pdf->AddPage();
    				$pdf->useTemplate($tplIdx,0,0,0,0,true);
    			}
    		}
    		$req_pre_insertion_num_docs_livrets = mysqli_prepare($bdd,'INSERT INTO num_livrets_docs(num_id_docs,num_id_livrets) VALUES(?,?)'); //pr걡rer la requ뵥 pour ins곥r le nouveau livret
    		mysqli_stmt_bind_param($req_pre_insertion_num_docs_livrets,"ii",$id_doc,$id_livret); //param굲er la requ뵥
    		if(!mysqli_stmt_execute($req_pre_insertion_num_docs_livrets)) //exꤵter la requ뵥
    		{
    			echo "Erreur : ".mysqli_error($bdd);
    		}
     
    		$iChapitres++;
    	}
    	$pdf->Output('./livrets/'.$nom_doc_final2.'');
     
    	$pdf2 = new FPDI();
    	$pdf2->AddPage();
     
    	$pdf2->SetFont('Arial','B',20);
    	$pdf2->MultiCell(100,10,$type_produit);
    	$pdf2->SetFont('Arial','B',16);
    	$pdf2->MultiCell(100,10,$nom_type);
    	$pdf2->SetFont('Arial','B',16);
    	$pdf2->MultiCell(100,10,$n_serie_produit);
     
    	$pdf2->AddPage();
    	$pdf2->SetFont('Arial','B',20);
    	$pdf2->MultiCell(100,30,utf8_decode('Tables des matières'));
    	foreach($nbPremPages as $key => $value)
    	{
    		$ligne = $value.str_repeat('...',30).$key;
    		$pdf2->SetFont('Arial','B',16);
    		$pdf2->MultiCell(200,10,$ligne);
    	}
     
    	$req_livret = 'SELECT * FROM livrets WHERE id='.$id_livret.'';
    	$reponse_livret = mysqli_query($bdd,$req_livret);
    	while($datas_livrets = mysqli_fetch_assoc($reponse_livret))
    	{
    		$chemin_livret = $datas_livrets['chemin'];
    	}
    	mysqli_free_result($reponse_livret);
     
    	$NbPageLivret = $pdf2->setSourceFile($chemin_livret);
     
    	for($i2 = 1; $i2 <= $NbPageLivret; $i2++)
    	{
    		if($i2 == 1)
    		{
    			$pdf2 -> AddPage(); //rajouter une page
     
    			$tplIdx2 = $pdf2->importPage($i2); //importer la page
    			$pdf2->useTemplate($tplIdx2, 0,0,0,0,true); //utiliser le mod魥
    		}
    		else
    		{
    			$tplIdx2 = $pdf2->importPage($i2);
     
    			$pdf2->AddPage();
    			$pdf2->useTemplate($tplIdx2,0,0,0,0,true);
    		}
    	}
     
    	$pdf2->Output();
    ?>
    Je n'ai aucune suggestion.

    Pouvez-vous, s'il vous plaît, m'éclaircir sur l'erreur ?

    Merci de vos réponses et de votre attention sur ce message.
    Cordialement.

    ZeRedDiamond

    I'm back after all these years !!!

    Mon blog personnel

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu ne peux pas avoir en meme temps l'affichage de la page HTML et l'envoi du fichier PDF.
    Ton formulaire pourrait simplement pointer vers le script qui génère le PDF.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur réseaux
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Points : 101
    Points
    101
    Par défaut
    Bonjour,
    Merci de votre réponse rapide, mais j'ai essayé votre solution de redirection en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($_POST['create']))
    	{
    		header('location:genere_livret_pdf.php');
    	}
    Mais malheureusement, il affiche toujours la même erreur mais dans un fichier différent :

    FPDF error: Some data has already been output, can't send PDF file (output started at /chemin/vers/serveur/fpdf.php:1)

    L'erreur se situe dans le fichier fpdf.php, le fichier du programme FPDF, ce qui m'étonne beaucoup.

    Là je ne sais plus quoi faire

    Je vais quand même essayer de résoudre mon problème de mon côté.

    Merci de votre attention pour mon problème.
    Cordialement.

    ZeRedDiamond

    I'm back after all these years !!!

    Mon blog personnel

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Vérifie que genere_livret_pdf.php est bien encodé Sans BOM s'il est en UTF8.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur réseaux
    Inscrit en
    Février 2015
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseaux

    Informations forums :
    Inscription : Février 2015
    Messages : 45
    Points : 101
    Points
    101
    Par défaut
    Bonjour,
    j'ai finalement pu résoudre l'erreur et finaliser le fichier PDF. J'ai en fait mais des commentaires au début du fichier creation_livret.php et je les ai enlevés et cela a résolu mon problème.

    J'ai aussi modifié l'encodage de tous les fichiers en UTF8 sans BOM.

    Merci d'être penché sur mon problème
    Cordialement.

    ZeRedDiamond

    I'm back after all these years !!!

    Mon blog personnel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FPDF] FPDF error: Some data has already been output, can't send PDF file
    Par jmnicolas dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 12/07/2010, 19h30
  2. Réponses: 1
    Dernier message: 01/03/2010, 16h36
  3. Réponses: 5
    Dernier message: 01/02/2010, 16h43
  4. [FPDF] FPDF error: Some data has already been output, can't send PDF file
    Par dolfy dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/10/2008, 15h37
  5. [FPDF] Some data has already been output, mais où ?
    Par baggie dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 11/04/2008, 22h16

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