Page 1 sur 1

Générer un php sur deux colonnes avec une base de données

Posté : 18 mai 2008, 11:12
par gwendal
Salut,

J'utilise la classe fpdf pour créer un document PDF à partir d'une base de données.

Je veux faire un tableau de ce type :

Image

Il est classé par ordre d'entreprise et vous voyez que actuellement, j'affiche en horizontale, sauf que ca n'est pas pratique pour la lecture.

Je voudrais faire une colonne classée en ordre alphabétique, et une fois arrivé en bas de page, je passe à la deuxième colonne toujours classé par ordre alphabétique et puis passage à la deuxième page pour faire la même chose.

Seulement la création du pdf ce fait horizontalement, je ne peux pas remonter en haut de page pour continuer à afficher d'autres éléments alors que je suis arrivé en bas de page.

Voyez vous un moyen de régler ce problème et j'éspère que je suis clair dans mon explication.

Merci d'avance.

Actuellement mon code est le suivant ( attention c'est en cours et brut pour le moment )

Code : Tout sélectionner

<? require('./pdflib/fpdf.php'); class PDF extends FPDF { //En-tête function Header() { //Police Arial gras 15 $this->SetFont('Arial','B',8); //Décalage à droite $this->Cell(26); $datedujour=date("d-m-Y"); //Titre $this->Cell(30,6,'Annuaire entreprise - Le : '.$datedujour,0,0,'C'); //Saut de ligne $this->Ln(10); } //Pied de page function Footer() { //Positionnement à 1,5 cm du bas $this->SetY(-15); //Police Arial italique 8 $this->SetFont('Arial','I',8); //Numéro de page $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C'); } } $pdf=new PDF(); $pdf->AliasNbPages(); $pdf->AddPage(); include_once('connexion.php'); $query="SELECT * FROM entreprises ORDER BY entreprise"; $result=mysql_query($query); $pdf->SetFont('Arial','B',6); echo $pdf->Cell(6,3,'N°',1); echo $pdf->Cell(44,3,'Entreprise',1); echo $pdf->Cell(14,3,'Tél',1); echo $pdf->Cell(14,3,'Fax',1); echo $pdf->Cell(14,3,'Portable',1); echo $pdf->Cell(8,3,'',0); $pdf->SetFont('Arial','B',6); echo $pdf->Cell(6,3,'N°',1); echo $pdf->Cell(44,3,'Entreprise',1); echo $pdf->Cell(14,3,'Tél',1); echo $pdf->Cell(14,3,'Fax',1); echo $pdf->Cell(14,3,'Portable',1); echo $pdf->Ln(); while($row=mysql_fetch_array($result)) { $pdf->SetFont('Arial','B',6); echo $pdf->Cell(6,3,$row['telesnault'],1); echo $pdf->Cell(44,3,$row['entreprise'],1); echo $pdf->Cell(14,3,$row['tel'],1); echo $pdf->Cell(14,3,$row['Fax'],1); echo $pdf->Cell(14,3,$row['portable'],1); echo $pdf->Cell(8,3,'',0); $row=mysql_fetch_array($result); echo $pdf->Cell(6,3,$row['telesnault'],1); echo $pdf->Cell(44,3,$row['entreprise'],1); echo $pdf->Cell(14,3,$row['tel'],1); echo $pdf->Cell(14,3,$row['Fax'],1); echo $pdf->Cell(14,3,$row['portable'],1); echo $pdf->Ln(); } mysql_close(); $pdf->Output(); ?>

Posté : 18 mai 2008, 11:45
par d0m
Salut,

en sachant par avance combien de lignes maximum tu auras dans une page c'est possible.

Dans un premier temps tu ranges tes résultats de la base de données dans un tableau ou autre structure php trié par ordre alphabétique.
Ensuite tu calcules combien tu vas pouvoir afficher de lignes sur une page. Disons 20 par exemples.
Tu vas alors afficher dans la 1ère ligne du pdf la 1ère entreprise du tableau et la 21ème,
dans la 2ème ligne la 2ème entreprise et la 22ème
...
dans la dernière ligne de la page la 20 et la 40ème entreprise.
etc...

Posté : 18 mai 2008, 15:07
par gwendal
Bon j'ai fais quelques essais, mais j'ai problème avec le tableau associatif ( mauvaise maitrise des tableaux associatifs )

si par exemple je fais ca :

Code : Tout sélectionner

while($row=mysql_fetch_array($result)) { $tableau[$row['entreprise']]=$row['tel']; }
Comment je fais par la suite pour lui dire prend moi le premier et le 21 eme

Je ne peux pas faire un echo de $tableau[1] par exmple cela ne semble pas fonctionner.

Posté : 18 mai 2008, 19:39
par d0m
il suffit de structurer ton tableau autrement, un peu comme un enregistrement :
un tableau ayant pour clé le numéro de la ligne : 0,1,2,...

et chaque élément du tableau étant un tableau contenant les champs à afficher dans la ligne.

Tu pourras donc ainsi afficher selon les index numériques.