Boucle PHP/MySQL avec librairie FDPF
kartable2004
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
acerb -
acerb -
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++ ;
}
?>
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:
- Boucle PHP/MySQL avec librairie FDPF
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Expert php pinterest - Télécharger - Langages
- Librairie anspach ✓ - Forum Consommation & Internet
- Php alert ✓ - Forum PHP
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.
@+
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.
@+
kartable2004
Ca m'intéresse toujours. Si tu peux m'envoyer ton fichier, merci d'avance !!!
acerb
Moi aussi ca m'interesse, si qqun a ce script, merci.
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 ???
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 ???
et si tu fai un
sinon après il y a la solution de mettre un count dans ta requete.
print mysql_num_fields($result1);il te dis quoi ?
sinon après il y a la solution de mettre un count dans ta requete.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.