FPDF et MySQL mise en page

Résolu
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010 - 17 févr. 2009 à 13:24
massbbc Messages postés 126 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 24 février 2022 - 30 juil. 2012 à 17:53
Bonjour,

Ca fait plusieurs jours que je cherche la solution , je m'en approche mais sans y arriver complètement, je fais donc appel à vos lumières :).
Ce code doit générer un PDF contenant des informations issues d'une BDD MySQL. Le but est d'avoir une étiquette par page, avec sur chacune les informations d'un enregistrement MySQL. Pour le moment j'arrive à générer une seule étiquette par PDF, j'aimerais pouvoir éditer toutes les étiquettes d'un coup dans un seul PDF.
Merci.

<?php

include('connection.inc.php');

require('fpdf.php');

$id = $_POST['id'];
$id_annee = $_POST['annee'];

$req = "SELECT * FROM agent";
$result = mysql_query($req);
//$total = mysql_num_rows($result);

while($row = mysql_fetch_array($result))
{
$voiture1 = $row["immat_auto1"];
$voiture2 = $row["immat_auto2"];
$moto = $row["immat_moto"];
 

class PDF extends FPDF
{
//En-tête
function Header()
{
    //Logo
    $this->Image('logo_hal.jpg',20,25,33);
    $this->Image('logo.jpg',165,10,33);
    //Police Arial gras 15
    $this->SetFont('Arial','B',12);
    //Décalage à droite
    //$this->Cell(73);
    $this->SetXY(80,30);
    //Titre
    $this->Cell(45,7,'Autorisation d\'accés',1,'C');
    $this->SetXY(79,40);
    $this->Cell(90,7,'Plate-forme logistique');
}
}

//date et immat position cellules
$dimension=array(145,210);
$pdf=new PDF('L','mm',$dimension);
$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$voiture1);

$pdf->Output();
}
A voir également:

14 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
18 févr. 2009 à 21:10
Erf, est-ce que tu te rend compte de ce que tu écrit ? Essaye de lire ton code. Lisons le donc ensemble d'ailleurs :
Tu fais ta requête SQL et tu test le nombre d'entrées retournées. Si le nombre d'entrée est différent de zéro, tu fait la boucle suivante : pour chaque entrée retournée tu assigne la valeur du champ immat_auto1 dans une variable (tu remarquera qu'a chaque passage l'ancienne valeur est écrasée et a la fin tu n'a donc que la dernière). Une fosi que tu as fait ta boucle qui n'a aucun sens tu vas créer un nouveau pdf avec deux cellules l'une a côté de l'autre (une ligne quoi).
Question gagnante : est-ce que tu crois que les autres cellules vont se créer par magie ? Tu dit d'en créer une, pas d'en créer d'autre.
Tu remarquera qu'avant tu créais un nouveau pdf a chaque passage dans la boucle. Perso je n'ai jamais essayé une telle chose mais je suppose qu'a chaque fois l'ancien devais être écrasé.

Reprenons maintenant ce que tu cherche a faire, et dans l'ordre :
1. tu fais ta requette (c'est ok ça).
2. tu créé le pdf et y définit la police etc.
3. pour chaque résultat de ta requette (boucle) tu vas ajouter une nouvelle ligne a ton pdf.
4. tu sauvegarde ton pdf.
3
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
22 févr. 2009 à 16:31
J'ai trouvé la solution, il fallait modifier la requête au niveau du WHERE : != ""

$req = 'SELECT * FROM agent WHERE immat_auto1 != "" ORDER BY nom';

Cette fois la requête n'affiche pas les champs sans string.

@+
3
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
17 févr. 2009 à 21:13
Salut,

Commence donc déjà par déclarer ta classe en dehors du while.
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
18 févr. 2009 à 09:27
Ok, c'est chose faite, il ne reste plus que ça :
<?php

include('connection.inc.php');

require 'fpdf.php';
require 'class_pdf.php';

$id = $_POST['id'];
$id_annee = $_POST['annee'];

$req = "SELECT * FROM agent";
$result = mysql_query($req);
//$total = mysql_num_rows($result);

while($row = mysql_fetch_array($result))
{
$voiture1 = $row["immat_auto1"];
$voiture2 = $row["immat_auto2"];
$moto = $row["immat_moto"];
 

//date et immat position cellules
$dimension=array(145,210);
$pdf=new PDF('L','mm',$dimension);
$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$voiture1);

$pdf->Output();
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
18 févr. 2009 à 09:41
J'ai modifié mon code d'une manière qui me semble plus logique, mais je n'ai toujours qu'un seul enregistrement qui s'affiche.

<?php

include('connection.inc.php');

require 'fpdf.php';
require 'class_pdf.php';

$id = $_POST['id'];
$id_annee = $_POST['annee'];

$req = 'SELECT * FROM agent';
$result = mysql_query($req);
$total = mysql_num_rows($result);

if($total) {

while($row = mysql_fetch_array($result))
{

//date et immat position cellules
$dimension=array(145,210);
$pdf=new PDF('L','mm',$dimension);
$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$row["immat_auto1"]);

$pdf->Output();
}
}
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
18 févr. 2009 à 13:29
Personne pour un un coup de main ?
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
18 févr. 2009 à 19:29
Tu instancie ta classe dans le while, pas bon ça. En fait, retire tout du while sauf ce qui sert a ajouter une ligne d'enregistrement dans le pdf.

Pense également a sauter des lignes après chaque enregistrement (avec Ln il me semble).
0
bruno9173 Messages postés 44 Date d'inscription vendredi 28 mars 2008 Statut Membre Dernière intervention 19 avril 2010
18 févr. 2009 à 20:37
Ok j'ai laissé le strict nécessaire dans le while, mais je n'ai toujours qu'un seul enregistrement généré dans le pdf. Sur le coup je séche car d'habitude je mis prend de cette manière pour afficher un array (sans pdf).

<?php

include('connection.inc.php');

require 'fpdf.php';
require 'class_pdf.php';

$id = $_POST['id'];
$id_annee = $_POST['annee'];

$req = 'SELECT * FROM agent';
$result = mysql_query($req);
$total = mysql_num_rows($result);

if($total) {

while($row = mysql_fetch_array($result))
{
$voiture1 = $row["immat_auto1"];
}
}

//date et immat position cellules
$dimension=array(145,210);
$pdf=new PDF('L','mm',$dimension);
$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$voiture1);

$pdf->Output();

?>
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
19 févr. 2009 à 10:48
Merci, tout fonctionne , j'ai compris mon erreur. Je met le code pour ceux qui chercheraient ce genre d'info.
Reste plus qu'a intégrer les autres champs.

<?php

include('connection.inc.php');

require 'fpdf.php';
require 'class_pdf.php';

$id = $_POST['id'];
$id_annee = $_POST['annee'];

$req = 'SELECT * FROM agent ORDER BY nom';
$result = mysql_query($req);

//date et immat position cellules
$dimension=array(145,210);
$pdf=new PDF('L','mm',$dimension);

$total = mysql_num_rows($result);

if($total) {

while($row = mysql_fetch_array($result))
{
$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$row["immat_auto1"]);
}
}
$pdf->Output();
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
20 févr. 2009 à 11:27
Hello, je reviens vers vous pour finaliser la chose
Je ne mens sors pas, je voudrais éditer en pdf seulement les champs d'une table ou il y a une string. (ce sont des immatriculations). J'affiche bien tous es pdf mais même les champs ou il n'y a rien. J'ai tout tenté dans ma requête mysql : IS NOT NULL etc...mais rien n'y fait.
Merci à tous.

<?php

include('connection.inc.php');

require 'fpdf.php';
require 'class_pdf.php';

$id = $_POST['id'];
$id_annee = $_POST['annee'];

$req = 'SELECT * FROM agent WHERE immat_auto2 IS NOT NULL ORDER BY nom';
$result = mysql_query($req);

//date et immat position cellules
$dimension=array(145,210);
$pdf=new PDF('L','mm',$dimension);

$total = mysql_num_rows($result);

if (isset($_POST['editer1']))
{
while($row = mysql_fetch_array($result)) {
$immat_auto1 = $_POST['immat_auto1'];

$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$row["immat_auto1"]);
$pdf->SetFont('Arial','B',12);
$pdf->SetTextColor(32,32,32);
$pdf->SetXY(75,112);
$pdf->Cell(30,10,"Numéro enregistrement ".$row["id"]."");
}
}

if (isset($_POST['editer2']))
{
while($row = mysql_fetch_array($result)) {
$immat_auto2 = $_POST['immat_auto2'];

$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$row["immat_auto2"]);
$pdf->SetFont('Arial','B',12);
$pdf->SetTextColor(32,32,32);
$pdf->SetXY(75,112);
$pdf->Cell(30,10,"Numéro enregistrement ".$row["id"]."");
}
}
if (isset($_POST['editer3']))
{
while($row = mysql_fetch_array($result)) {
$immat_moto = $_POST['immat_moto'];

$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$row["immat_moto"]);
$pdf->SetFont('Arial','B',12);
$pdf->SetTextColor(32,32,32);
$pdf->SetXY(75,112);
$pdf->Cell(30,10,"Numéro enregistrement ".$row["id"]."");
}
}
$pdf->Output();
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
21 févr. 2009 à 20:16
Je  n'ai toujours pas trouvé ma solution, pouvez-vous m'aider svp.

j'affiche toujours tous les enregistrements même les champ vides de ma table.

require 'fpdf.php';
require 'class_pdf.php';

$id_annee = $_POST['annee'];

$req = 'SELECT * FROM agent WHERE immat_auto1 IS NOT NULL ORDER BY nom';
$result = mysql_query($req);

$id = $_POST['id'];
$immat_auto1 = $_POST['immat_auto1'];
$immat_auto2 = $_POST['immat_auto2'];
$immat_moto = $_POST['immat_moto'];

//date et immat position cellules
$dimension=array(145,210);
$pdf=new PDF('L','mm',$dimension);

$total = mysql_num_rows($result);

if (isset($_POST['editer1']))
{
if(mysql_num_rows($result)) {
while($row = mysql_fetch_array($result)) {

$pdf->AddPage();
$pdf->SetFont('Arial','B',35);
$pdf->SetTextColor(255,0,0);
$pdf->SetXY(70,60);
$pdf->Cell(50,10,$id_annee);
$pdf->SetFont('Arial','B',58);
$pdf->SetTextColor(128);
$pdf->SetXY(50,93);
$pdf->Cell(50,10,$row["immat_auto1"]);
$pdf->SetFont('Arial','B',12);
$pdf->SetTextColor(32,32,32);
$pdf->SetXY(75,112);
$pdf->Cell(30,10,"Numéro enregistrement ".$row["id"]."");
}
}
}
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
22 févr. 2009 à 00:45
Salut,

Juste comme ça : une chaine vide n'est pas la même chose que la valeur NULL, peut être que ton soucis vient de là. Un peu de lecture a ce sujet : http://dev.mysql.com/doc/refman/5.0/fr/problems-with-null.html
0
bruno3591 Messages postés 155 Date d'inscription dimanche 28 septembre 2008 Statut Membre Dernière intervention 28 mars 2010
22 févr. 2009 à 11:48
Merci pour ton aide, j'ai compris la différence entre NULL et '' mais ça ne résout pas le problème. Il y a toujours quelque chose qui m'échappe. je vais revoir ma copie. Bon dimanche.
0
massbbc Messages postés 126 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 24 février 2022 1
30 juil. 2012 à 17:53
Bonsoir!

Je sais que sa fais longtemp que ce sujet existe mais je suis interessé!

Dis moi bruno que contien ton fichier class_pdf.php ?

Merci
0
Rejoignez-nous