1

Bonjour,

je m'excuse si mon titre n'est pas très clair, je m'explique :


j'ai une page qui permet de generer le PDF via un bouton..., je récupère un paramètre de l'URL avec $_GET[] qui me sert d'indentifiant ( pr BD)

pour récupérer les les informations de la base de données, qui seront affichés dans le pdf, j'utilise la valeur contenue dans $_GET[]
ensuite je les insère dans le code HTML correspondant au contenu du PDF , ex:

contenu='<page backtop="10mm" backbottom="30mm" backleft="10mm" backright="10mm">
....

<p>'.$variable1.'</p>
<p>'.$variable2.'</p>
....
</page>';

alors le problème c'est que quand j'utilise une variable $_SESSION['id'] pour récupérer pour récupérer les variables ou une autre valeur, ça ne pose aucun problème, le PDF est généré correctement et les variables sont bien affichés.

lorsque j'utilise l'identifiant contenu dans le $_GET[], les variables ne sont pas affichées dans le PDF, j'ai essayé d'afficher ces variable en HTML uniquement, et elles sont bien affichées...

donc je ne comprend pas pourquoi ça ne marche pas lorsque j'utilise le $_GET. j'utilise également les fonctions ob_start() et ob_get_clean(), et je me demande si le bug ne vient pas de ces fonctions là , ou de HTML2PDF.

j'espère que j'ai été assez clair (dsl si ce n'es pas le cas :$). Avez vous déjà rencontré ce problème ? Avez vous une idée s'il vous plait?

Merci d'avance pour votre aide.


2

normalement, il n'y a pas de raison que ca ne marche pas. quelle est exactement la procédure que vous suivez ?
Ancien pseudo : lolo

3

Merci pour votre réponse, je vais essayer d'être plus claire :

fichier: page.php
url:...page.php?param=1
<?php ob_start() ... ?> code HTML (mise en forme de la page --> sans rapport avec le pdf) ... <?php $id=$_GET['param'] (paramètre passé à l'url $pdf = '<....code HTML, partie fixe...>' $sql="select nom,prénom from personne where id='$id''; .... //stockage des résultats de la requête dans un tableau à double dimension $data ..... //récupération des variables $nom=data[$i][0]; $prénom=data[$i][1]; //affichage dans la page HTML echo '<table style="width:100%;"> <tr style="width:100%;"> <td style="width:25%;">&nbsp;</td> <td style="width:50;" align="left">Nom:&nbsp;'.$nom.'</td> <td style="width:25%;">&nbsp;</td> </tr> <tr style="width:100%;"> <td style="width:25%;">&nbsp;</td> <td style="width:50%;" align="left">Prenom:&nbsp;&nbsp;<span style="font-weight:bold;">'.$prenom.'</span></td> <td style="width:25%;">&nbsp;</td> </tr> </table><br><br>'; ' //renseignement du contenu du PDF (les variables sont affichés dans la page HTML) $pdf .='<table style="width:100%;"> <tr style="width:100%;"> <td style="width:25%;">&nbsp;</td> <td style="width:50;" align="left">Nom:&nbsp;'.$nom.'</td> <td style="width:25%;">&nbsp;</td> </tr> <tr style="width:100%;"> <td style="width:25%;">&nbsp;</td> <td style="width:50%;" align="left">Service:&nbsp;&nbsp;<span style="font-weight:bold;">'.$prenom.'</span></td> <td style="width:25%;">&nbsp;</td> </tr> </table><br><br>'; $pdf.='<...code HTML..contenu qui ne dépend pas de la base de donnée >' //Click sur bouton qui permet de générer le PDF if ($_GET['pdf']!=""){ //Generation du Fichier PDF ob_get_clean(); $html2pdf = new HTML2PDF('P','A4', 'fr', false, 'ISO-8859-15'); $html2pdf->WriteHTML($pdf); //Forcer le téléchargement du PDF par le navigateur internet, avec un nom spécifique $html2pdf->Output('fichier.pdf', 'D'); } //--> le PDF est géneré correctement, mais les valeurs des variables $nom et $prenom ne sont pas affichés <... code HTML.. <form> <input name="pdf" type=submit value="recup pdf"/> </forme> ...code HTML > ?>


Lorsque j'affecte une valeur à $id, ou je lui affecte une variable de session le problème ne se pose pas, le pdf est generé correctement et les variable sans bien affichées. le problème se pose uniquement avec le $_GET[''].

voila, et merci d'avance.

4

heu, juste comme ca, pourquoi tu fais toute ta table en double ??? le but d'utilise ob_start et ob_get_clean est de récuperer tout ce qui est en echo... là tu fais le travail pleins de fois inutilement.

tu ferais mieux d'utiliser ton paramètre get "pdf", et suivant si il est présent ou non, faire une sortie html différente, ca sera plus propre

de plus, faire $_GET['pdf']!="" n'est pas bon, il faut faire isset($_GET['pdf']) pour savoir si le paramètre est présent... là tu n'as pas d'erreurs, car tu as désactivé dans ta config de PHP les erreurs de type notice...

de meme, utiliser directement le paramètre id dans ta requete est hyper dangereux, tu ne le protèges pas => une sql injection est hyper facile à réaliser... là, tu te repose sur le fait que ton PHP a peut etre les magic quotes d'activé... un utilisateur mal vaillant pourrait faire n'importe quoi dans ta base de donnée sans difficulté si ce n'est pas le cas...

enfin, concernant le fait que les variables ne s'affichent pas, cela ne peut venir que de ton script. essaye de faire un echo de ta variable $pdf apres le ob_get_clean. tu vera bien si elles y sont ou pas.
Ancien pseudo : lolo

5

Tout d'abord merci pour votre réponse .
heu, juste comme ca, pourquoi tu fais toute ta table en double ???


le fait d'avoir la table en double c'est que l'affichage sur la page et l'affichage en pdf est différent.
le but d'utilise ob_start et ob_get_clean est de récuperer tout ce qui est en echo... là tu fais le travail pleins de fois inutilement.

si j'ai utilisé ob_start et ob_get_clean,c'est pour éviter de tomber sur l'erreur :TCPDF ERROR: Some data has already been output, can't send PDF file,
je ne récupère pas tout le contenu de la page.
tu ferais mieux d'utiliser ton paramètre get "pdf", et suivant si il est présent ou non, faire une sortie html différente, ca sera plus propre

est ce que tu pourrais, s'il te plait expliquer un peu plus ce point?
de plus, faire $_GET['pdf']!="" n'est pas bon, il faut faire isset($_GET['pdf']) pour savoir si le paramètre est présent... là tu n'as pas d'erreurs, car tu as désactivé dans ta config de PHP les erreurs de type notice...

merci beaucoup, je vais tester
enfin, concernant le fait que les variables ne s'affichent pas, cela ne peut venir que de ton script. essaye de faire un echo de ta variable $pdf apres le ob_get_clean. tu vera bien si elles y sont ou pas.


j'ai essayé, les variables s'affichent correctement quand $id est récupéré autrement qu'avec un $get, et il n'y a rien qui s'affiche si non.

Merci beaucoup pour m'avoir répondu, je vais essayer de faire d'autres tests pour le get.

6

regarde l'exemple 9, il fait à peu pres ce que tu fais.
Ancien pseudo : lolo

7

Oki merci beaucoup, je vais regarder ça .