FPDF et MySQL mise en page [Résolu]

bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 17 févr. 2009 à 13:24 - Dernière réponse : massbbc 115 Messages postés jeudi 26 mai 2005Date d'inscription 8 septembre 2015 Dernière intervention
- 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();
}
Afficher la suite 

14 réponses

Répondre au sujet
TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention - 18 févr. 2009 à 21:10
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de TychoBrahe
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 22 févr. 2009 à 16:31
+3
Utile
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.

@+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de bruno3591
TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention - 17 févr. 2009 à 21:13
0
Utile
Salut,

Commence donc déjà par déclarer ta classe en dehors du while.
Commenter la réponse de TychoBrahe
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 18 févr. 2009 à 09:27
0
Utile
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();
}
Commenter la réponse de bruno3591
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 18 févr. 2009 à 09:41
0
Utile
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();
}
}
Commenter la réponse de bruno3591
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 18 févr. 2009 à 13:29
0
Utile
Personne pour un un coup de main ?
Commenter la réponse de bruno3591
TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention - 18 févr. 2009 à 19:29
0
Utile
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).
Commenter la réponse de TychoBrahe
bruno9173 44 Messages postés vendredi 28 mars 2008Date d'inscription 19 avril 2010 Dernière intervention - 18 févr. 2009 à 20:37
0
Utile
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();

?>
Commenter la réponse de bruno9173
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 19 févr. 2009 à 10:48
0
Utile
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();
Commenter la réponse de bruno3591
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 20 févr. 2009 à 11:27
0
Utile
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();
Commenter la réponse de bruno3591
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 21 févr. 2009 à 20:16
0
Utile
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"]."");
}
}
}
Commenter la réponse de bruno3591
TychoBrahe 1310 Messages postés samedi 31 janvier 2009Date d'inscription 5 juin 2013 Dernière intervention - 22 févr. 2009 à 00:45
0
Utile
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
Commenter la réponse de TychoBrahe
bruno3591 155 Messages postés dimanche 28 septembre 2008Date d'inscription 28 mars 2010 Dernière intervention - 22 févr. 2009 à 11:48
0
Utile
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.
Commenter la réponse de bruno3591
massbbc 115 Messages postés jeudi 26 mai 2005Date d'inscription 8 septembre 2015 Dernière intervention - 30 juil. 2012 à 17:53
0
Utile
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
Commenter la réponse de massbbc

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.