Problème de construction de tableau avec FPDF

Eléphant du PHP | 50 Messages

31 mai 2009, 19:23

Bonjour,

Je suis en train de finir un petit projet que j'ai attaquer il y a quelques semaines deja.
Un intranet pour gerer des absences. Merci a ceux qui m'ont permis d'avancer jusque ici.

Voila mon problème:

Via un formulaire et des <select> ( date debut ) , (datefin ) et checkbox ( choix de l'eleve ) je choisis les absences que je veux concernant un eleves pour avoir un recapitulatif.

Ceci fonctionne j'ai mon tableau et ensuite je clic sur un lien "PDF" qui pointe faire ma page qui utilise la class FPDF pour generer mon tableau en pdf.

Voici deja le code du lien
<a href="rapportabspdf.php?numeleve=<?php echo $valabs; ?>&datedebut=<?php echo $datedebut; ?>&datefin=<?php echo $datefin; ?>">PDF</a>
j'envoie a ma page "rapportabspdf.php" en GET mes variables.

Voici maintenant ma page rapport fpdf qui est censé generé mon BON pdf mais il me sort presque n'importe quoi. :)
<?php

require('PDF/fpdf.php');


// connexion a la base de données
   $serveurBD = "localhost"; 
    $nomUtilisateur = "XXXX"; 
    $motDePasse = "XXXX"; 
    $baseDeDonnees = "intranet"; 
    
    mysql_connect($serveurBD, $nomUtilisateur, $motDePasse); 
    
   
    // Sélection de la base de données: 
   
    mysql_select_db($baseDeDonnees); 
    
    
class PDF extends FPDF
{
//Tableau simple
function BasicTable($header,$resultat)
{

    //En-tête du tableau
    foreach($header as $col)
        {
        $this->Cell(20,7,$col,1);
        //echo $col;
        }
    $this->Ln();
    
    
    
    //Données du tableau
    
        foreach($resultat as $col)
            {
            $this->Cell(20,6,$col,1);
           //echo $col;
            }
        $this->Ln();
    
}
}


// Recuperation de mes variables
$numeleve = $_GET["numeleve"];
$datedebut = $_GET["datedebut"];
$datefin = $_GET["datefin"];


// Creation du PDF
$pdf=new PDF();
//$pdf->Open();
$pdf->AddPage();
$data=$pdf->SetFont('Arial','',7);

//Titres des colonnes

//$header=array('Date Absence','Heure debut','Heure Fin','Justifiee','Motif');
$header=array('Date Absence','Heure debut','Heure Fin','Justifiee','Motif');



// Requete qui constituera le tableau

$sql = "Select dateabs, heuredebut, heurefin, booljustif, justification FROM absences WHERE numeleve='$numeleve' and dateabs>'$datedebut' and dateabs<'$datefin'";
$requete = mysql_query($sql) or die( mysql_error() ) ;
$resultat = mysql_fetch_assoc($requete);


//Chargement des données
$pdf->BasicTable($header,$resultat);


// Sortie du fichier PDF
$pdf->Output();

?>

Pour info j'ai essayer ma requete dans phpmyadmin elle est ok les variable qui arrive sur la page sont bonnes.

Mais MALHEUREUSEMENT :) j'ai que la premier ligne d'absences qui apparait dans mon tableau sur mon pdf et pas la suivante... probleme de boucle ?

Je galere depuis des heures sans parvenir a trouver la solution
Si quelqu'un pouvait m'aider



Merci beaucoup par avance

Mammouth du PHP | 991 Messages

31 mai 2009, 20:31

Je pense que c'est logique ...

essaye avec un :
while($resultat = mysql_fetch_assoc($requete))
{
// Tu met ici ligne par ligne.

}
Bye Hawk
DevOps, Symfony4, Hoa

Eléphant du PHP | 50 Messages

31 mai 2009, 21:53

Que me conseil tu de mettre ds le while ? parce que c'est la fonction basictable qui rempli le tableau logiquement...
while($resultat = mysql_fetch_assoc($requete)) 
{ 

$pdf->BasicTable($header,$resultat);

} 

J'ai fait ca et lors de mon test il devrait me retourner deux enregistrements et cette fois ci il me retourne que le dernier contrairement a tout a l'heure ou il retournait le premier

Donc la a mon avis dans la boucle il ecrase a chaque enregistrement par le prochain enregistrement ce qui fait qu'il affiche que le dernier

Merci pour ton aide.

Mammouth du PHP | 991 Messages

01 juin 2009, 08:53

et en essayant quelque chose comme :

while($resultat = mysql_fetch_assoc($requete)) 
{ 

$tableau[] = $resultat

} 
$pdf->BasicTable($header,$tableau);

A mon avis il remplacé bien les données deja présente , mais sans le while il ne prend pas la suite.
Pour cela ton utilise un sorte de variable temporaire.

Bonne journée Hawk
DevOps, Symfony4, Hoa

Eléphant du PHP | 50 Messages

01 juin 2009, 11:29

Bon ca y es c'est terminer.

J'ai du mettre un troisieme parametre que disait que si l'entete etait mise une fois qu'il ne fallait pas la remetre au dessus de chaque ligne.

Voici mon code complet et fonctionnel pour ceux que ca pourrait aidé
<?php

require('PDF/fpdf.php');


// Connexion a la base de données
   $serveurBD = "localhost"; 
    $nomUtilisateur = "root"; 
    $motDePasse = "root"; 
    $baseDeDonnees = "intranet"; 
    
    mysql_connect($serveurBD, $nomUtilisateur, $motDePasse); 
    
   
    // Sélection de la base de données: 
   
    mysql_select_db($baseDeDonnees); 
    
    
    
class PDF extends FPDF
{
//Tableau simple
function BasicTable($header,$resultat,$entete)
{


    if($entete==0)
    {
    //En-tête du tableau
    foreach($header as $col)
        {
        $this->Cell(20,7,$col,1);
        //echo $col;
        }
    $this->Ln();
 
    //Données du tableau
    
        foreach($resultat as $col)
            {
            $this->Cell(20,6,$col,1);
           //echo $col;
            }
        $this->Ln();
    }    
    else
       //Données du tableau
        {
        foreach($resultat as $col)
            {
            $this->Cell(20,6,$col,1);
           //echo $col;
            }
        $this->Ln();
        }

    
}
}





// Récuperation des variables
$numeleve = $_GET["numeleve"];
$datedebut = $_GET["datedebut"];
$datefin = $_GET["datefin"];


// Creation du PDF
$pdf=new PDF();
$pdf->AddPage();
$data=$pdf->SetFont('Arial','',7);

//Titres des colonnes

//$header=array('Date Absence','Heure debut','Heure Fin','Justifiee','Motif');
$header=array('Date Absence','Heure debut','Heure Fin','Justifiee','Motif');


// Requete qui constituera le tableau

$sql = "Select dateabs, heuredebut, heurefin, booljustif, justification FROM absences WHERE numeleve='$numeleve' and dateabs>'$datedebut' and dateabs<'$datefin'";
//echo $sql;
//$sql = "Select dateabs, heuredebut, heurefin, booljustif, justification FROM absences";
$requete = mysql_query($sql) or die( mysql_error() ) ;


//Chargement des données
$entete=0;
while($resultat = mysql_fetch_assoc($requete)) 
{ 
$pdf->BasicTable($header,$resultat,$entete);
$entete=1;
} 


// Sortie du fichier PDF
$pdf->Output();

?>
Merci pour l'aide apporter