FPDF et problème de buffer

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : FPDF et problème de buffer

Re: FPDF et problème de buffer

par gregor » 18 déc. 2013, 00:48

Bonsoir, en effet j'ai lu le 'manuel' des fonctions de fpdf et par hasard j'ai lu que ce que je voulais faire était "impossible" .

Je venais en parler au cas où quelqu'un chercherai la même chose,

en tout cas merci pour vos réponses - mine de rien c'est un gros boulot de faire un site un peu complet

Re: FPDF et problème de buffer

par xTG » 16 déc. 2013, 14:56

Le problème que tu constatais en fait vient du fait que la librairie fpdf coupe le flux et donc que tout ce que tu mettais après n'est pas envoyé.
Et heureusement sinon tu le rajoutais au fichier pdf. ;)

Donc la solution de la popup est la bonne solution.

Re: FPDF et problème de buffer

par gregor » 16 déc. 2013, 14:28

problème résolu, j'ai crée une page autonome pour le formulaire qui s'ouvre en popup (et si elle ne s'ouvre pas un lien apparaît ) -

pensez vous que ce soit propre de faire comme ça ?

Re: FPDF et problème de buffer

par gregor » 16 déc. 2013, 13:06

Bonjor, et merci pour la réponse rapide !


Quand je le fais il me donne le pdf sans soucis par contre il ne m'affiche toujours pas les messages ... (on dirai qu'il refuse que la page change de contenu ...).
<?
	//TRAITEMENT DU FORMULAIRE
	if(!empty($_POST['nom']))
	{
		$nom	=	$_POST['nom'];

			//créer un pdf
		require('fpdf/fpdf.php');
		$pdf = new FPDF('P','mm','A4') ; //portrait, mm , A4
		$pdf->AddPage();
		$pdf->SetFont('Arial','B',16);
		$pdf->Cell(40,10,"bonjour $nom");
		$pdf->Output('fichierpdf.pdf', 'D'); //*/


		echo "1 !!! <br />"; //////////////////////////////////////	message 1 -->
	}

	//ob_start();
	echo "2 <br />"; 		//////////////////////////////////////	message 2 -->




	// la boucle ci dessous est un test supplémentaire, j'aurais pu m'en contenter mais 
		// même ça ne marche pas, alors que le 5 au dessus marche ... 
	if(!empty($_POST['nom']))
	{
		echo "3 !!!<br/>"; //////////////////////////////////////	message 3 -->
	}




?>

4 <br />				<!-- /////////////////////////////////	message 4 -->





<!-- FORMULAIRE -->
<form method="post" action="index.php">
	<p>nom, prénom : <input type="text" name="nom" size="25" /><br />	
	<input type="submit" value="Valider" /></p>
</form>

il ne m'affiche ni le 1 ni le 3 ...

Je vais voir quand même ce que je peux faire avec ça, si quelqu'un a une idée je suis preneur!

merci encore pour la réponse

Re: FPDF et problème de buffer

par xTG » 15 déc. 2013, 12:31

Enlèves tes affichages avant l'utilisation de la librairie. ;)

Re: FPDF et problème de buffer

par gregor » 15 déc. 2013, 11:02

Désolé de faire un second message, je ne peux pas modifier le premier -

le code que j'ai donné est celui qui m'affiche le message d'erreur FPDF,


le code qui me donne le pdf mais qui ne m'affiche rien est le même avec ob_start(); juste avant require(fpdf/fdpf.php);



je le copie ci dessous au besoin
1<br />                         <!-- /////////////////////////////////  message 1 -->

<?
        echo "2 <br />";        //////////////////////////////////////  message 2 -->

        //TRAITEMENT DU FORMULAIRE
        if(!empty($_POST['nom']))
        {
                $nom    =       $_POST['nom'];

                echo "3 !!!<br />"; ////////////////////////////////    message 3 -->

        //les modifications d'une base de donnée marchent quand je les mets ici, pas de pb là dessus

                //créer un pdf
                ob_start();
                require('fpdf/fpdf.php');
                $pdf = new FPDF('P','mm','A4') ; //portrait, mm , A4
                $pdf->AddPage();
                $pdf->SetFont('Arial','B',16);
                $pdf->Cell(40,10,"bonjour $nom");
                $pdf->Output('fichierpdf.pdf', 'D'); //*/


                echo "4 !!!<br />"; //////////////////////////////////////      message 4 -->


        }

        echo "5 <br />";                //////////////////////////////////////  message 5 -->


        // la boucle ci dessous est un test supplémentaire, j'aurais pu m'en contenter mais
                // même ça ne marche pas, alors que le 5 au dessus marche ...
        if(!empty($_POST['nom']))
        {
                echo "6 !!!<br/>"; //////////////////////////////////////       message 6 -->
        }


?>

7 <br />                                <!-- /////////////////////////////////  message 7 -->





<!-- FORMULAIRE (aucun problème à ce niveau) -->
<form method="post" action="index.php">
        <p>nom, prénom : <input type="text" name="nom" size="25" /><br />     
        <input type="submit" value="Valider" /></p>
</form>

FPDF et problème de buffer

par gregor » 15 déc. 2013, 10:54

Bonjour !

Je suis désolé de venir solliciter votre aide mais là j’atteins les limites de mes modestes connaissances en programmation ( je viens tout juste de commencer le php pour faire un site - j'avais déjà des notions en programmation (c++) donc ça a été vite au début ). Si quelqu'un pouvait me trouver une solution ce serait super.



Voilà le problème : ( j'ai réduit la page au strict minimum pour faire simple et ne pas prendre trop de votre temps )

J'ai un site, j'ai un formulaire.
lorsque l'utilisateur clique sur valider, je veux que les infos soient stockées dans une base de donnée (ça c'est bon, ça marche), que ça affiche un texte sur la page et que ça délivre un pdf (oui c'est là que ça coince ... afficher le massage marche, télécharger le pdf marche, mais je n'arrive pas a lui faire faire les deux).

Pour le pdf j'ai utilisé fpdf.

Si j'ordonne de délivrer le pdf, le compilateur (ou interpréteur de code je ne sais pas comment vous l'appelez) me sort " Some data has already been output, can't send PDF file " .

Après avoir cherché sur internet, je vois que beaucoup règlent le problème avec un ob_start(); (ou ob_clean(); ) avant le code qui crée le pdf ...

je le fais, ça marche - génial ! je peux télécharger le pdf, sauf que le texte ne s'affiche plus, (en revanche la base de donnée est correctement modifiée, j'imagine que c'est parce que l'opération est exécutée, contrairement au texte qui se stocke temporairement dans un buffer j'imagine ...).

Donc je patauge sur cette question un peu "technique",
j'imagine que les solutions sont soit d'ouvrir un nouveau buffer (est ce possible ...), soit d'imprimer le buffer a l'écran avant de le vider ...



Voici le code réduit au plus simple :


1<br />				<!-- /////////////////////////////////	message 1 -->

<?
	echo "2 <br />";	//////////////////////////////////////	message 2 -->

	//TRAITEMENT DU FORMULAIRE
	if(!empty($_POST['nom']))
	{
		$nom	=	$_POST['nom'];

		echo "3 !!!<br />"; ////////////////////////////////	message 3 -->

	//les modifications d'une base de donnée marchent quand je les mets ici, pas de pb là dessus

		//créer un pdf
		require('fpdf/fpdf.php');
		$pdf = new FPDF('P','mm','A4') ; //portrait, mm , A4
		$pdf->AddPage();
		$pdf->SetFont('Arial','B',16);
		$pdf->Cell(40,10,"bonjour $nom");
		$pdf->Output('fichierpdf.pdf', 'D'); //*/


		echo "4 !!!<br />"; //////////////////////////////////////	message 4 -->


	}

	echo "5 <br />"; 		//////////////////////////////////////	message 5 -->


	// la boucle ci dessous est un test supplémentaire, j'aurais pu m'en contenter mais 
		// même ça ne marche pas, alors que le 5 au dessus marche ... 
	if(!empty($_POST['nom']))
	{
		echo "6 !!!<br/>"; //////////////////////////////////////	message 6 -->
	}


?>

7 <br />				<!-- /////////////////////////////////	message 7 -->





<!-- FORMULAIRE (aucun problème à ce niveau) -->
<form method="post" action="index.php">
	<p>nom, prénom : <input type="text" name="nom" size="25" /><br />	
	<input type="submit" value="Valider" /></p>
</form>


je n'arrive pas a afficher les messages 3,4 et 6 ...

j'ai essayé certaines choses, toutes infructueuses ... avec ob_start, ob_clean, ob_flush, ob_get_content et vardump ...


Merci d'avance a ceux qui pourront essayer de me guider !!