IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

FPDF boucle sur array [PHP 5.1]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut FPDF boucle sur array
    Bonsoir

    Je voudrais afficher des données provenant d'un BDD Mysql dans un PDF. J'utilise FPDF.
    Le PDF créé génère un enregistrement par page, j'aimerais qu'il contienne 3 enregistrements avant de créer une nouvelle page, avec à nouveau 3 enregistrements etc...jusqu'à la fin de la boucle.

    Avant d'ouvrir la page PDF, j'affiche un tableau html ou là les données sont bien extraites de la table, et quand je tape la requête directement dans MySql j'obtiens le résultat attendu. J'en déduit que ma requête n'est pas en cause, mais plutôt ma façon de boucler sur mon array.

    Je bloque bêtement sur mes boucles for et while. Pouvez-vous me dire si déjà vous voyez une cohérence dans mon code, et si oui me dire pourquoi ça ne fonctionne pas comme attendu ?

    Merci de votre aide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    class PDF extends FPDF
    {
    //En-tête
    function Header()
    {
    	$tournee = $_POST['tournee'];
    	setlocale (LC_TIME, 'fr_FR','fra');
    	$aujourdhui = strftime("%A %d %B %Y %T");
    	$this->SetXY(10,5);
    	$this->SetFont('Arial','B',12);
    	$this->SetTextColor(35);
    	$this->Cell(60,7,'Bordereau de livraison','C');
    	$this->SetXY(10,15);
    	$this->SetFont('Arial','',8);
    	$this->Cell(20,7,'Edité le '.$aujourdhui,'C');
    	//Tournée
    	$this->SetXY(10,30);
    	$this->SetFont('Arial','B',14);
    	$this->MultiCell(40, 10, "Tournée ".$tournee."", 1, "L", 0); 
    }
    //Pied de page
    function Footer()
    {
        $this->SetY(-20); 
    	$this->SetFont('Arial','',10);
    	$this->Cell(70,7,'Opération : valeur');
    	$this->SetXY(130,-20); 
    	$this->SetFont('Arial','',10);
    	$this->Cell(80,7,"valeur");
    	//Positionnement à 1,5 cm du bas
        $this->SetY(-15);
        //Police Arial italique 8
        $this->SetFont('Arial','I',8);
        //Numéro de page centré
        $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
    	}
    }
     
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    //BON DE LIVRAISON
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    if(isset($_POST['editer_un_bord'])){
     
    $dimension=array(270,210);
    $pdf=new PDF('L','mm',$dimension);
     
    $pdf->AliasNbPages();
    $pdf->SetFont('Arial','B',10); //Police, gras, taille
     
    $a = mysql_query("select tournee, ordre, unite, site, adresse_livraison, tel_livraison, quantite, qte_carton, qte_palette, id_article, designation from commande where date_cmd = '".$date."' and tournee = '".$tournee."' group by site order by ordre");
    $ab = mysql_num_rows($a);
    if($ab){
     
    for($i=0; $i<$ab; $i++)
     
    while($re = mysql_fetch_array($a)){
     
    $pdf->AddPage();
     
    $pdf->SetXY(10,50);
    $pdf->SetFont('Arial','',9);
    $pdf->SetFillColor(204,204,255);
    $pdf->MultiCell(100, 5, $re['site']."\n".$re['adresse_livraison'], 1, "L", 1);
     
    $pdf->SetXY(10,70);
    $pdf->SetFont('Arial','',8);
    $pdf->Cell(90,4,"Tel : ".$re['tel_livraison']);
    $pdf->SetXY(100,70);
    $pdf->SetFont('Arial','',8);
    $pdf->Cell(100,4,$re['unite']);
    		}
    	}
    }
    $pdf->output();
    ?>

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Points : 111
    Points
    111
    Par défaut
    Bonjour,
    Ton AddPage est dans la boucle while, donc à chaque enregistrement tu ajoutes une nouvelle page. Ta boucle for ne sert à rien.
    Essaye comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    $a = mysql_query("select tournee, ordre, unite, site, adresse_livraison, tel_livraison, quantite, qte_carton, qte_palette, id_article, designation from commande where date_cmd = '".$date."' and tournee = '".$tournee."' group by site order by ordre");
    $ab = mysql_num_rows($a);
    if($ab){
        $pdf->AddPage();
        $cptr = 0;
        while($re = mysql_fetch_array($a)){
            if ($cptr == 3) {
                $pdf->AddPage();
                $cptr = 0;
            }
            $pdf->SetXY(10,50);
            $pdf->SetFont('Arial','',9);
            $pdf->SetFillColor(204,204,255);
            $pdf->MultiCell(100, 5, $re['site']."\n".$re['adresse_livraison'], 1, "L", 1);
     
            $pdf->SetXY(10,70);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(90,4,"Tel : ".$re['tel_livraison']);
            $pdf->SetXY(100,70);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(100,4,$re['unite']);
            $cptr++;
        }
    }
    Je définis un compteur, je vérifie à chaque passage s'il est égal à 3, si oui, j'ajoute une nouvelle page et je remets mon compteur à zéro.

    Par contre, il faut adapter le reste du code car dans l'état, les 3 enregistrements vont s'écrire au même endroit.

  3. #3
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    3h17 !

    Merci ton code fonctionne, par contre les 3 enregistrements se chevauchent, ils sont les uns sur les autres. La boucle fort ne pourrait-elle pas m'aider, cette fois-ci, à ajouter une "Cell" à chaque nouvelle enregistrement dans le while ?

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Février 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Février 2008
    Messages : 77
    Points : 111
    Points
    111
    Par défaut
    3h17 !
    Je travaille de nuit !

    Pour ce qui est de rajouter une boucle, ça me parait pas très logique puisqu'avec while tu es déjà dans une boucle. Si tu veux utiliser des variables pour positionner ton point d'insertion, il faut le faire comme pour $cptr.
    Je fixe arbitrairement un écart de 60 entre les enregistrements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
     
    $a = mysql_query("select tournee, ordre, unite, site, adresse_livraison, tel_livraison, quantite, qte_carton, qte_palette, id_article, designation from commande where date_cmd = '".$date."' and tournee = '".$tournee."' group by site order by ordre");
    $ab = mysql_num_rows($a);
    if($ab){
        $pdf->AddPage();
        $cptr = 0;
        $y    = 50;
        while($re = mysql_fetch_array($a)){
            if ($cptr == 3) {
                $pdf->AddPage();
                $cptr = 0;
                $y    = 50;
            }
            $pdf->SetXY(10,$y);
            $pdf->SetFont('Arial','',9);
            $pdf->SetFillColor(204,204,255);
            $pdf->MultiCell(100, 5, $re['site']."\n".$re['adresse_livraison'], 1, "L", 1);
     
            $pdf->SetXY(10,$y+20);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(90,4,"Tel : ".$re['tel_livraison']);
            $pdf->SetXY(100,$y+20);
            $pdf->SetFont('Arial','',8);
            $pdf->Cell(100,4,$re['unite']);
            $cptr++;
            $y = $y + 60;
        }
    }

  5. #5
    Membre actif Avatar de arthuro45
    Profil pro
    Développeur du dimanche
    Inscrit en
    Juillet 2009
    Messages
    602
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur du dimanche

    Informations forums :
    Inscription : Juillet 2009
    Messages : 602
    Points : 265
    Points
    265
    Par défaut
    Merci pour ton aide. Tous fonctionne...et surtout j'ai compris.

    Bon courage pour le boulot

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. boucle for sur array
    Par rebel29270 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 10/10/2011, 16h53
  2. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  3. [MySQL] Boucle sur array
    Par arthuro45 dans le forum PHP & Base de données
    Réponses: 26
    Dernier message: 11/12/2009, 11h32
  4. [FPDF] une boucle sur trois colonnes
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/05/2007, 14h33
  5. [MFC] Boucle sur un bouton
    Par karl3i dans le forum MFC
    Réponses: 6
    Dernier message: 17/02/2004, 11h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo