Boucle PHP/MySQL avec librairie FDPF

Fermé
kartable2004 Messages postés 3 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 14 novembre 2007 - 13 nov. 2007 à 21:34
 acerb - 25 sept. 2008 à 15:18
Bonjour à tous,
Je tente vainement de faire une boucle dans une requête mySQL du style while ($i < mysql_num_fields($result1)) { etc }.
Je suis parti du célèbre exemple de devis/facture de Xavier Nicolay basé sur la librairie FDPF et mon objectif est d'imprimer plusieurs factures à la suite. Merci de votre aide..

Voici le code en question :

<?php
// (c) Xavier Nicolay
// Exemple de génération de devis/facture PDF

define('FPDF_FONTPATH','font/');
require('invoice.php');

$pdf = new INVOICE( 'P', 'mm', 'A4' );
$pdf->Open();

// ajout perso //

$link = mysql_connect("localhost", "root", "")
or die("Impossible de se connecter");
mysql_select_db("tartampion") or die("Could not select database");

$query1 = "SELECT * FROM invoice";
$result1 = mysql_query($query1) or die("Query failed");

$i = 0;
while ($i < mysql_num_fields($result1)) {

// fin d'ajout perso //


$pdf->AddPage();


// ajout perso //

while ($line = mysql_fetch_assoc($result1)) {

$date = $line['date'] ;
$codecli = $line['code_client'] ;
$numfact = $line['num_facture'] ;
$adrfact = $line['adr_fact'] ;
$modreglt = $line['mod_reglt'] ;
$ech = $line['echeance'] ;
$TVA = $line['TVA'] ;
$enref = $line['enref'] ;
$coderef = $line['code_ref'] ;

// fin d'ajout perso //



$pdf->addSociete( "Tartampion SA",
"avenue de la paix\n" .
"75000 Paris\n".
"\n";
$pdf->fact_dev( "FACTURE ", $numfact );
$pdf->temporaire( "" );
$pdf->addDate($date);
$pdf->addClient($codecli);
$pdf->addPageNumber("1");
$pdf->addClientAdresse($adrfact);
$pdf->addReglement($modreglt);
$pdf->addEcheance($ech);
$pdf->addNumTVA($TVA);
$pdf->addReference($enref);
$cols=array( "REFERENCE" => 23,
"DESIGNATION" => 78,
"QUANTITE" => 22,
"P.U. HT" => 26,
"MONTANT H.T." => 30,
"TVA" => 11 );
$pdf->addCols( $cols);
$cols=array( "REFERENCE" => "L",
"DESIGNATION" => "L",
"QUANTITE" => "C",
"P.U. HT" => "R",
"MONTANT H.T." => "R",
"TVA" => "C" );
$pdf->addLineFormat( $cols);
$pdf->addLineFormat($cols);

$y = 109;
$line = array( "REFERENCE" => $coderef ,
"DESIGNATION" => "Commissions\n" .
"\n" .
"- fre 1001707\n" .
"- fre 1001689\n" .
"- fre 1001681\n" ,
"QUANTITE" => "1",
"P.U. HT" => "335.99",
"MONTANT H.T." => "335.99",
"TVA" => "0" );
$size = $pdf->addLine( $y, $line );
$y += $size + 2;



$pdf->addCadreTVAs();

// invoice = array( "px_unit" => value,
// "qte" => qte,
// "tva" => code_tva );
// tab_tva = array( "1" => 19.6,
// "2" => 5.5, ... );
// params = array( "RemiseGlobale" => [0|1],
// "remise_tva" => [1|2...], // {la remise s'applique sur ce code

TVA}
// "remise" => value, // {montant de la remise}
// "remise_percent" => percent, // {pourcentage de remise sur ce

montant de TVA}
// "FraisPort" => [0|1],
// "portTTC" => value, // montant des frais de ports TTC
// // par defaut la TVA = 19.6 %
// "portHT" => value, // montant des frais de ports HT
// "portTVA" => tva_value, // valeur de la TVA a appliquer sur

le montant HT
// "AccompteExige" => [0|1],
// "accompte" => value // montant de l'acompte (TTC)
// "accompte_percent" => percent // pourcentage d'acompte (TTC)
// "Remarque" => "texte" // texte
$tot_prods = array( array ( "px_unit" => 335.99, "qte" => 1, "tva" => 0 ),
array ( "px_unit" => 0, "qte" => 1, "tva" => 1 ));
$tab_tva = array( "1" => 19.6,
"2" => 5.5);
$params = array( "RemiseGlobale" => 0,
"remise_tva" => 0, // {la remise s'applique sur ce code TVA}
"remise" => 0, // {montant de la remise}
"remise_percent" => 10, // {pourcentage de remise sur ce montant

de TVA}
"FraisPort" => 1,
"portTTC" => 0, // montant des frais de ports TTC
// par defaut la TVA = 19.6 %
"portHT" => 0, // montant des frais de ports HT
"portTVA" => 19.6, // valeur de la TVA a appliquer sur le

montant HT
"AccompteExige" => 0,
"accompte" => 0, // montant de l'acompte (TTC)
"accompte_percent" => 15, // pourcentage d'acompte (TTC)
"Remarque" => "exonération de TVA : art. 259 A-6° du CGI" );

$pdf->addTVAs( $params, $tab_tva, $tot_prods);
$pdf->addCadreEurosFrancs();
$pdf->Output();

}

$i++ ;
}

?>
A voir également:

7 réponses

J'avais le même problème pour faire un publipostage à partir d'un fichier. J'avais un code php qui permettait d'obtenir 1 pdf pour 1 fiche. J'ai fais une boucle pour faire un publipostage et 1 seul fiche sortait.
J'ai remarque que dès qu'il y a une erreur le pdf est impossible (ex : mauvais index ...).
J'ai augmenté le buffer memoire.

ini_set("memory_limit",'64M');

et j'ai ajouté le code suivant

class PDF extends FPDF
{
}

Maintenant, je peux faire un pdf de 200 pages a partir d'un fichier.
Je tiens mon code à dispo.
@+
2
kartable2004
14 mai 2008 à 16:53
Ca m'intéresse toujours. Si tu peux m'envoyer ton fichier, merci d'avance !!!
0
Moi aussi ca m'interesse, si qqun a ce script, merci.
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 nov. 2007 à 07:55
bonjour,

et quel pb/erreur rencontres-tu
0
kartable2004 Messages postés 3 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 14 novembre 2007
14 nov. 2007 à 08:38
Je n'arrive qu'à produire une seule facture à la fois... Le premier while : while ($i < mysql_num_fields($result1)) est inopérant et pourrait aussi bien disparaître, ça ne change rien.

Si je change la place du $pdf->Output(); pour l'intercaler entre les } en bas de la page de code, ce n'est pas bon du tout.

J'ai essayé avec autre chose que mysql_num_fields, mais rien ne marche ???
0
sfel Messages postés 1640 Date d'inscription lundi 18 juin 2007 Statut Membre Dernière intervention 15 juillet 2009 430
14 nov. 2007 à 08:40
et si tu fai un
print mysql_num_fields($result1);
il te dis quoi ?

sinon après il y a la solution de mettre un count dans ta requete.
0

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

Posez votre question
kartable2004 Messages postés 3 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 14 novembre 2007
14 nov. 2007 à 14:41
Un print mysql_num_fields($result1); donne 10, ensuite FPDF plante... Je pense que ce qui complique l'affaire, c'est cette librairie FPDF qui gère la sortie en PDF avec le $pdf->Output(); Une fois que la ligne output est passée, il y a certainement un problème pour boucler. Mais une boucle avant le output génère une erreur.
0
Bonjour,

Par hasard, auriez-vous trouvé une solution pour imprimer plusieurs factures dans le même pdf avec fpdf?
Merci d'avance.

Ju
0
kartable2004
14 janv. 2008 à 17:59
Non , j'ai l'impression que cette librairie n'est pas étudiée pour permettre ce genre de chose. Mais si vous trouvez de votre côté, merci de laisser un message ici

Bon courage
0