FPDF et MySQL mise en page

Résolu
Signaler
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010
-
Messages postés
125
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
22 septembre 2019
-
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

Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
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.
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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.

@+
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
Salut,

Commence donc déjà par déclarer ta classe en dehors du while.
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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();
}
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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();
}
}
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

Personne pour un un coup de main ?
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
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).
Messages postés
44
Date d'inscription
vendredi 28 mars 2008
Statut
Membre
Dernière intervention
19 avril 2010

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();

?>
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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();
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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();
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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"]."");
}
}
}
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
14
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
Messages postés
155
Date d'inscription
dimanche 28 septembre 2008
Statut
Membre
Dernière intervention
28 mars 2010

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.
Messages postés
125
Date d'inscription
jeudi 26 mai 2005
Statut
Membre
Dernière intervention
22 septembre 2019
1
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