FPDF / page blanche / boucle while
Résolu/Fermé
A voir également:
- FPDF / page blanche / boucle while
- Supprimer page blanche word - Guide
- Traduire une page - Guide
- Word numéro de page 1/2 - Guide
- Page d'accueil iphone - Guide
18 réponses
Utilisateur anonyme
9 févr. 2011 à 09:53
9 févr. 2011 à 09:53
Bonjour,
Le prob doit être autour de la boucle While, vous avez un bout de code pour regarder ce qui cloche ?
Cordialement
Le prob doit être autour de la boucle While, vous avez un bout de code pour regarder ce qui cloche ?
Cordialement
Heureux de voir une réponse =)
Voici mon code :
( je rappelle quand effectivement ,sans la boucle le pdf fonctionne, mais ne renvois qu'une page (logique) )
ps : J'ai virer l'indentation de la boucle While
Voici mon code :
( je rappelle quand effectivement ,sans la boucle le pdf fonctionne, mais ne renvois qu'une page (logique) )
ps : J'ai virer l'indentation de la boucle While
<?php session_start(); error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); //http://www.fpdf.org/ include('../include/connexionbdd.php'); if ($_SESSION['identification'] != "admin") { echo "Vous n'avez pas l'autorisation d'acceder à cette page."; exit; } else { require('../fpdf16/fpdf.php'); //Creer le pdf $pdf=new FPDF('P','mm','A4'); //Le début de l'aventure ! $datesql = date("Y-m"); $reqSQL = "SELECT * FROM commande WHERE datecmd LIKE '".$datesql."%'"; $execSQL = mysql_query($reqSQL) or die ("Echec de la requête ".$reqSQL); $ligneSQL = mysql_fetch_array($execSQL); while($ligneSQL != false) { if($ligneSQL["dateannule"] == '0000-00-00' || $ligneSQL["chequecadeaucmd"] == 1) { $ligneSQL = mysql_fetch_array($execSQL); } else { $date=date("d/m/Y"); //Infos commande $datecmd = $ligneSQL["datecmd"]; $datecmd = substr($datecmd,8,2)."-".substr($datecmd,5,2)."-".substr($datecmd,0,4); $codedistribcmd = $ligneSQL["codedistribcmd"]; $codeclecmd = $ligneSQL["codeclecmd"]; //Infos distrib $reqDistrib = "SELECT * FROM distributeur WHERE codedistrib = '".$codedistribcmd."'"; $execDistrib = mysql_query($reqDistrib ) or die ("Echec de la requête ".$reqDistrib ); $ligneDistrib =mysql_fetch_array($execDistrib ); $nomdistrib = $ligneDistrib["nomdistrib"]; $adressedistrib = $ligneDistrib["adressedistrib"]; $cpdistrib = $ligneDistrib["cpdistrib"]; $villedistrib = $ligneDistrib["villedistrib"]; $nbfacturedistrib = $ligneDistrib["nbfacturedistrib"]; if($nbfacturedistrib == "") { $nbfacturedistrib = 0; } //Infos clé $reqCmd = "SELECT * FROM cles WHERE codecle = '".$codeclecmd."'"; $execCmd = mysql_query($reqCmd ) or die ("Echec de la requête ".$reqCmd."<br/>".mysql_error() ); $ligneCmd = mysql_fetch_array($execCmd ); $codecle = $ligneCmd["codecle"]; $nomcle = $ligneCmd["nomcle"]; $prixcledistrib = $ligneCmd["prixcledistrib"]; //Infos facture $reqFac = "SELECT * FROM facture"; $execFac = mysql_query($reqFac ) or die ("Echec de la requête ".$reqFac ); $ligneFac = mysql_fetch_array($execFac ); $nbfacture = $ligneFac["nbfacture"]; if($nbfacture == "") { $nbfacture = 0; } $nbfacture = $nbfacture + 1; $datenumfacture = date("Ym"); //On récupère la TVA $reqSQLtva="SELECT valeurprix FROM prix WHERE nomprix = 'TVA'"; $execSQLtva = mysql_query($reqSQLtva) or die ("Echec de la requête ".$reqSQLtva); $ligneSQLtva = mysql_fetch_array($execSQLtva); $tva = $ligneSQLtva["valeurprix"]; $montanttva = $prixcledistrib * ($tva / 100); $montanttva = round($montanttva, 2); $prixcledistribTVA = $prixcledistrib + $montanttva; //Construction numéro de facture $numfacture = $datenumfacture."-".$nbfacturedistrib."-".$nbfacture; //Creer une page $pdf->AddPage(); // Couleur gris claire pour les en-tete $pdf->SetFillColor(232,232,232); //////////////////////// // EN TETE // //////////////////////// $pdf->Rect(5,5,200,25); $pdf->SetFont('Arial','B',15); $pdf->Cell(0,0,'NOMBOITE',0,1); $pdf->Ln(5); $pdf->SetFont('Arial','B',10); $pdf->Cell(0,0,'www.NOMBOITE.fr',0,1); $pdf->Ln(5); $pdf->Cell(0,0,'************* - Tel : **-**-**-**-**); $pdf->Image('../include/ban.jpeg',163,7,40); $pdf->Ln(5); $pdf->Cell(0,0,'SIRET : *** *** *** ***** *** ******* - T.V.A ************',0,1); //////////////////////// // PARTIE HAUT GAUCHE // //////////////////////// $pdf->Rect(5,33,95,35); $pdf->SetFont('Arial','B',10); $pdf->Ln(12); $pdf->Cell(0,0,'Facture N\' : '.$numfacture,0,1); $pdf->setX(114); $pdf->Cell(0,0,'Client :',0,1); $pdf->Ln(8); $pdf->Cell(0,0,'Date : '.$datecmd,0,1); //////////////////////// // PARTIE HAUT DROITE // //////////////////////// $pdf->Rect(110,33,95,35); $pdf->setX(114); $pdf->Cell(0,0, $nomdistrib,0,1); $pdf->Ln(5); $pdf->setX(114); $pdf->Cell(0,0,$adressedistrib,0,1); $pdf->Ln(5); $pdf->setX(114); $pdf->Cell(0,0,$cpdistrib.' '.$villedistrib,0,1); //////////////////// // PARTIE MILIEUX // //////////////////// //Rectangle central $pdf->Rect(5,71,200,190); // Premiere ligne $pdf->Rect(5,71,200,10,FD); $pdf->Ln(23); $pdf->Cell(0,0,'Code',0,1); $pdf->setX(35); $pdf->Cell(0,0,'Designation',0,1); $pdf->setX(130); $pdf->Cell(0,0,'Qte',0,1); $pdf->setX(160); $pdf->Cell(0,0,'P.U(H.T)',0,1); $pdf->setX(180); $pdf->Cell(0,0,'TOTAL(H.T)',0,1); // Deuxieme ligne $pdf->Ln(8); $pdf->Cell(0,0,$codecle,0,1); $pdf->setX(35); $pdf->Cell(0,0,$nomcle,0,1); $pdf->setX(130); $pdf->Cell(0,0,'1',0,1); $pdf->setX(160); $pdf->Cell(0,0,$prixcledistrib,0,1); $pdf->setX(180); $pdf->Cell(0,0,$prixcledistribTVA,0,1); // Lignes verticales du rectangle central $pdf->Rect(5,71,26,20); $pdf->Rect(5,71,122,20); $pdf->Rect(5,71,152,20); $pdf->Rect(5,71,173,20); // Lignes horizontales du rectangle central $pdf->Rect(5,71,200,20); /////////////////// // PARTIE DU BAS // /////////////////// $pdf->SetFont('Arial','IU',9); $pdf->Ln(182); $pdf->Cell(0,0,'Paiement 30 jours fin de mois',0,1); // Deux rectangles horizontales $pdf->Rect(60,264,145,8,FD); $pdf->Rect(60,264,145,16); // Lignes verticales $pdf->Rect(60,264,37,16); $pdf->Rect(60,264,73,16); $pdf->Rect(60,264,109,16); // Titre ligne 1 $pdf->SetFont('Arial','B',10); $pdf->setX(74); $pdf->Cell(0,0,'Montant H.T',0,1); $pdf->setX(117); $pdf->Cell(0,0,'% TAXE',0,1); $pdf->setX(143); $pdf->Cell(0,0,'Montant Taxe',0,1); $pdf->setX(178); $pdf->Cell(0,0,'Montant T.T.C',0,1); $pdf->Ln(8); $pdf->Cell(0,0,'Facture en Euro',0,1); // Montant ligne 2 $pdf->setX(80); $pdf->Cell(0,0,$prixcledistrib,0,1); $pdf->setX(117); $pdf->Cell(0,0,$tva,0,1); $pdf->setX(151); $pdf->Cell(0,0,$montanttva,0,1); $pdf->setX(186); $pdf->Cell(0,0,$prixcledistribTVA,0,1); $ligneSQL = mysql_fetch_array($execSQL); } } $pdf->Output(); } ?>
Utilisateur anonyme
9 févr. 2011 à 10:41
9 févr. 2011 à 10:41
Re
Déjà regarde cette ligne
$pdf->Cell(0,0,'************* - Tel : **-**-**-**-**);
Il manque une apostrophe à la fin
$pdf->Cell(0,0,'************* - Tel : **-**-**-**-**');
Après je ferais plus ceci pour la boucle
while(mysql_fetch_array($execSQL)!==false) {
if (($ligneSQL["dateannule"] != '0000-00-00') && ($ligneSQL["chequecadeaucmd"] != 1)) {
//traitement
}
}
C'est plus simple. Evitez aussi les like surtout sur une date, ça empêche l'utilisation d'index écrivez plutôt WHERE datecmd between '.$dateSQL.'01 and '.$dateSQL.'31
enfin 31 c'est pas très beau mais vous voyez sans doute l'idée
Déjà regarde cette ligne
$pdf->Cell(0,0,'************* - Tel : **-**-**-**-**);
Il manque une apostrophe à la fin
$pdf->Cell(0,0,'************* - Tel : **-**-**-**-**');
Après je ferais plus ceci pour la boucle
while(mysql_fetch_array($execSQL)!==false) {
if (($ligneSQL["dateannule"] != '0000-00-00') && ($ligneSQL["chequecadeaucmd"] != 1)) {
//traitement
}
}
C'est plus simple. Evitez aussi les like surtout sur une date, ça empêche l'utilisation d'index écrivez plutôt WHERE datecmd between '.$dateSQL.'01 and '.$dateSQL.'31
enfin 31 c'est pas très beau mais vous voyez sans doute l'idée
Pour l'apostrophe j'ai l'avais supprimer en remplaçant le numéro de tel par **, mais il y était bien.
Pour la date et le LIKE, disons que ça permet de sortir toute les factures correspondantes sans avoir a choisir de date, mais effectivement je partirais sur un between je pense après donc je vais m'y mettre.
Pour le while :
while(($ligneSQL = mysql_fetch_array($execSQL))!==false)
et
while($ligneSQL != false)
sont sensiblement la même chose non ? Quel est la différence ?
La requête s'exécute dans le while si on utilise votre méthode non ?
(non je ne critique pas, je veux saisir toute la subtilité de la chose =)
Pour la date et le LIKE, disons que ça permet de sortir toute les factures correspondantes sans avoir a choisir de date, mais effectivement je partirais sur un between je pense après donc je vais m'y mettre.
Pour le while :
while(($ligneSQL = mysql_fetch_array($execSQL))!==false)
et
while($ligneSQL != false)
sont sensiblement la même chose non ? Quel est la différence ?
La requête s'exécute dans le while si on utilise votre méthode non ?
(non je ne critique pas, je veux saisir toute la subtilité de la chose =)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
9 févr. 2011 à 11:15
9 févr. 2011 à 11:15
Disons que c'est plus lisible, c'est tout
Donc ce n'était pas l'apostrophe alors...
Dans ce cas procédez par étapes.
Commentez toute la partie pdf après $date=date("d/m/Y") avec /*
et fermez le commentaire */ avant $ligneSQL = mysql_fetch_array($execSQL); }} $pdf->Output();
ajoutez après $date=("d/m/Y");
un echo $ligneSQL["datecmd"].'<br/>';
Comme ça vous verrez si la boucle fonctionne bien, si ça marche, réduisez votre zone commentée petit à petit, vous allez tomber sur le bug de cette façon
Ha oui, tout en haut du code mettez un error_reporting(E_ALL);
histoire de voir les messages d'erreur
Donc ce n'était pas l'apostrophe alors...
Dans ce cas procédez par étapes.
Commentez toute la partie pdf après $date=date("d/m/Y") avec /*
et fermez le commentaire */ avant $ligneSQL = mysql_fetch_array($execSQL); }} $pdf->Output();
ajoutez après $date=("d/m/Y");
un echo $ligneSQL["datecmd"].'<br/>';
Comme ça vous verrez si la boucle fonctionne bien, si ça marche, réduisez votre zone commentée petit à petit, vous allez tomber sur le bug de cette façon
Ha oui, tout en haut du code mettez un error_reporting(E_ALL);
histoire de voir les messages d'erreur
Hum étrange.. Je pensais que ça afficherais quelque chose mais non.
J'ai fais ça :
Avec le reste de la page qui n'a pas changé.
Il m'affiche encore une page blanche.
Pourtant si je fais
Il m'affiche :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FPDF error: Some data has already been output, can't send PDF file
En format html et non pas pdf ( s'qui à du sens )
J'ai fais ça :
$i = 1; while($ligneSQL != false) { $pdf->AddPage(); $pdf->Cell(0,0,$i,0,1); $i = $i + 1; $ligneSQL = mysql_fetch_array($execSQL); } $pdf->Output();
Avec le reste de la page qui n'a pas changé.
Il m'affiche encore une page blanche.
Pourtant si je fais
$pdf->AddPage(); echo $i."<br/>"; $i = $i + 1;
Il m'affiche :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FPDF error: Some data has already been output, can't send PDF file
En format html et non pas pdf ( s'qui à du sens )
<?php require('../fpdf16/fpdf.php'); $pdf=new FPDF('P','mm','A4'); $i = 1; while($i < 10) { $pdf->AddPage(); $pdf->Cell(0,0,$i,0,1); $i = $i + 1; } $pdf->Output(); ?>
J'ai simplifier la chose à ça, mais toujours une page blanche.
Donc c est vraiment le while qui fout la m***e..
Ok alors j'ai tester le bout de code while $i sur un fpd qui fonctionne, en faite le while m'affiche rien du tout, c'est pour ça que j'ai une page blanche.
J'avais foutu le while avec des saut de ligne + l'affichage du $i, mais rien du tout. Juste le pdf normal.
J'avais foutu le while avec des saut de ligne + l'affichage du $i, mais rien du tout. Juste le pdf normal.
Utilisateur anonyme
9 févr. 2011 à 11:57
9 févr. 2011 à 11:57
Oui, tu crée un fichier PDF vide à priori, si tu mets un echo en plus avant le output c'est normal qu'il couine
Mais un $pdf->Cell(200,200,'coucou'); devrait t'afficher quelques chose
un $pdf->Cell(0,0, $i) c'est un peu pas très haut pour une cellule 0
Mais un $pdf->Cell(200,200,'coucou'); devrait t'afficher quelques chose
un $pdf->Cell(0,0, $i) c'est un peu pas très haut pour une cellule 0
Disons qu'il y a des marges avec.
Mais même avec un
require('../fpdf16/fpdf.php');
$pdf=new FPDF('P','mm','A4');
$pdf->AddPage();
while($i < 10)
{
$pdf->Cell(150,150,$i,0,1);
$i = $i + 1;
}
$pdf->Output();
rien ne s'affiche.
Pourtant j'ai un exemple de fpdf venant d'un ami, avec une boucle while, qui fonctionne parfaitement..
Je ne vois vraiment pas ou est le problème :/
Mais même avec un
require('../fpdf16/fpdf.php');
$pdf=new FPDF('P','mm','A4');
$pdf->AddPage();
while($i < 10)
{
$pdf->Cell(150,150,$i,0,1);
$i = $i + 1;
}
$pdf->Output();
rien ne s'affiche.
Pourtant j'ai un exemple de fpdf venant d'un ami, avec une boucle while, qui fonctionne parfaitement..
Je ne vois vraiment pas ou est le problème :/
Bon je comprend pas.
J'ai creer une nouvelle page.
Dedans je met ça :
Du copier coller exacte de mon pdf qui fonctionne.
Et pourtant, j'ai une page blanche... o.o'
J'ai creer une nouvelle page.
Dedans je met ça :
<?php require('../fpdf16/fpdf.php'); $pdf=new FPDF('P','mm','A4'); $pdf->AddPage(); $pdf->Cell(0,0,'BON DE COMMANDE - Partie FrenchKeys',0,1); $pdf->Output(); ?>
Du copier coller exacte de mon pdf qui fonctionne.
Et pourtant, j'ai une page blanche... o.o'
Apres moulte test, l'erreur viendrait de ça :
if($ligneSQL["dateannule"] == '0000-00-00' || $ligneSQL["chequecadeaucmd"] == 1)
ou $ligneSQL["chequecadeaucmd"] == 1 fonctionne, mais ou
$ligneSQL["dateannule"] == '0000-00-00' ne fonctionne pas.
Meme en utilisant des variable du type
$vardate = $ligneSQL["dateannule"];
$vardateannule = '0000-00-00';
while($ligneSQL != false)
{
if($vardate == $vardateannule || $ligneSQL["chequecadeaucmd"] == 1)
......
if($ligneSQL["dateannule"] == '0000-00-00' || $ligneSQL["chequecadeaucmd"] == 1)
ou $ligneSQL["chequecadeaucmd"] == 1 fonctionne, mais ou
$ligneSQL["dateannule"] == '0000-00-00' ne fonctionne pas.
Meme en utilisant des variable du type
$vardate = $ligneSQL["dateannule"];
$vardateannule = '0000-00-00';
while($ligneSQL != false)
{
if($vardate == $vardateannule || $ligneSQL["chequecadeaucmd"] == 1)
......
Bon en faite, c'était une erreur humaine.
$ligneSQL["dateannule"] == '0000-00-00'
aurait du etre
$ligneSQL["dateannule"] != '0000-00-00'
Effectivement la page blanche était normale.
Mais après le coup des pages blanche était étrange dans le cas des pages simples. ( qui parfois fonctionnaient sur chrome et pas sur firefox o.o )
Bref, cela fonctionne, tout est nikel.
Merci du coup de main, et bonne continuation =)
$ligneSQL["dateannule"] == '0000-00-00'
aurait du etre
$ligneSQL["dateannule"] != '0000-00-00'
Effectivement la page blanche était normale.
Mais après le coup des pages blanche était étrange dans le cas des pages simples. ( qui parfois fonctionnaient sur chrome et pas sur firefox o.o )
Bref, cela fonctionne, tout est nikel.
Merci du coup de main, et bonne continuation =)
Utilisateur anonyme
9 févr. 2011 à 16:19
9 févr. 2011 à 16:19
Attends j'ai vu un truc debile
Avant ta boucle while
$i n'est pas definie non ?
Mettre $i =0;
Avant ta boucle while
$i n'est pas definie non ?
Mettre $i =0;
Utilisateur anonyme
9 févr. 2011 à 16:21
9 févr. 2011 à 16:21
Et active tes messages d'erreur
Sans message, impossible de comprendre
Error_reporting('E_ALL');
Au debut du code
Sans message, impossible de comprendre
Error_reporting('E_ALL');
Au debut du code
Attends j'ai vu un truc debile
Avant ta boucle while
$i n'est pas definie non ?
Mettre $i =0;
Ahah, non j'ai du rater un copier coller ^^
Sinon en haut de ma page j'avais déjà
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
de noté, mais bon, le problème venait de ma mauvaise condition, et d'un firefox qui avait du mal, au niveau du cache ou au niveau des cookies je sais pas, enfin, ça fonctionne maintenant.
Avant ta boucle while
$i n'est pas definie non ?
Mettre $i =0;
Ahah, non j'ai du rater un copier coller ^^
Sinon en haut de ma page j'avais déjà
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
de noté, mais bon, le problème venait de ma mauvaise condition, et d'un firefox qui avait du mal, au niveau du cache ou au niveau des cookies je sais pas, enfin, ça fonctionne maintenant.
Utilisateur anonyme
10 févr. 2011 à 08:17
10 févr. 2011 à 08:17
Hum le cache,
En PHP il est conseillé de vider le cache des pages pour éviter ce problème :
header("cache-control:no-cache,no-store,must-revalidate");
header("pragma:no-cache");
En PHP il est conseillé de vider le cache des pages pour éviter ce problème :
header("cache-control:no-cache,no-store,must-revalidate");
header("pragma:no-cache");