Export base de données en fichier pdf [Résolu]

Signaler
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009
-
 soumboula -
Bonjour tout le monde, j'ai un soucis que je n'arrive pas à régler et qui devient assez urgent pour moi, j'ai une base de données Access qui contient l'annuaire interne de ma société, je veux l'exporter en fichier pdf en donnant le choix à l'utilisateur les données qu'il veut exporter.J'ai l'erreur undefined variable etc... sur les lignes :
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);

$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);

$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fo
nd);
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

Voici mon code :

<html>


<head>


</head>


<form action="convert_pdf.php" method="POST">


Site

N° téléphone fixe

N° fax

N° portable

Adresse e-mail


</form>



<?php


$base="D:\\Qualite\Annuaire\Annuaire.mdb";
$Annuaire="Annuaire";


//connection au serveur:
$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;

//PDF


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


$pdf=new FPDF('L','cm','A4');

//Titres des colonnes
$header=array('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');

$pdf->SetFont('Arial','B',14);
$pdf->AddPage();
$pdf->SetFillColor(96,96,96);
$pdf->SetTextColor(255,255,255);


if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {


$addInQuery = implode (', ', $_POST['choix']);
echo "$addInQuery";

$resultat = odbc_exec( $cnx, "SELECT Nom,'.$addInQuery.' FROM Annuaire ORDER BY Nom");


$pdf->SetXY(3,3);
for($i=0;$i<sizeof($header);$i++)
$pdf->cell(5,1,$header[$i],1,0,'C',1);

$pdf->SetFillColor(0xdd,0xdd,0xdd);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','',10);
$pdf->SetXY(3,$pdf->GetY()+1);
$fond=0;
while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table
{
$pdf->cell(5,0.7,$row['Nom'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

$pdf->SetXY(3,$pdf->GetY()+0.7);
$fond=!$fond;
}
$pdf->output();

}


?>




</html>

55 réponses

Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
ouais, en fait, il y a plusieurs choses.

1/ Ecris $resultat = odbc_exec( $cnx, 'SELECT Nom'.$addInQuery.' FROM Annuaire ORDER BY Nom'); histoire d'être cohérent

2/ fais afficher la requête pour être sûr de ce que tu as

3/ l'affichage du pdf doit se faire avant tout autre affichage, du coup
je te conseille pour être sûr de faire comme je proposais plus haut (un
fichier avec le php en tout premier).



Ton problème est: la requête (vérifiable avec 2) et les headers (cf 3)


*****
THINK -> SEEK -> ASK
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Apparemment, c'est pas bon, ca me donne toujours undefined index pour chaque variable non cochée...
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
A mon avis tu fais qqch de pas net, chez moi ça tourne... essaie peut-être ça:





<?php



if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {







$base="D:\\Qualite\Annuaire\Annuaire.mdb";

$Annuaire="Annuaire";



//connection au serveur:

$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;



//PDF



define('FPDF_FONTPATH','font/');

require('fpdf/fpdf.php');



$pdf=new FPDF('L','cm','A4');



//Titres des colonnes

$header=array('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');



$pdf->SetFont('Arial','B',14);

$pdf->AddPage();

$pdf->SetFillColor(96,96,96);

$pdf->SetTextColor(255,255,255);





if (isset($_POST['choix'])){

$addInQuery = implode(',', $_POST['choix']);

$addInQuery = ','.$addInQuery;

}

else $addInQuery = '';



$resultat = odbc_exec( $cnx, 'SELECT Nom'.$addInQuery.' FROM Annuaire ORDER BY Nom');



$pdf->SetXY(3,3);

for($i=0;$i<sizeof($header);$i++)

$pdf->cell(5,1,$header[$i],1,0,'C',1);



$pdf->SetFillColor(0xdd,0xdd,0xdd);

$pdf->SetTextColor(0,0,0);

$pdf->SetFont('Arial','',10);

$pdf->SetXY(3,$pdf->GetY()+1);

$fond=0;

while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table

{

$pdf->cell(5,0.7,$row['Nom'],1,0,'C',$fond);

$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);

$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);

$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);

$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);

$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);



$pdf->SetXY(3,$pdf->GetY()+0.7);

$fond=!$fond;

}

$pdf->output();



}

}

else{

?>

<html>

<head>

</head>





<form action="" method="POST">



Site



N° téléphone fixe



N° fax



N° portable



Adresse e-mail











</form>

</html>

<?php }?>




Après, si ça marche pas, j'abandonne...

*****
THINK -> SEEK -> ASK
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
$pdf->cell(5,0.7,$row['Nom'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

encore une fois tu ne sais pas ici combien de cases ont été cochées
donc si tu ne coches pas 'société'
$row['Societe'] n'existe pas !!
Messages postés
1154
Date d'inscription
mardi 9 septembre 2003
Statut
Membre
Dernière intervention
15 août 2009
15
Hehe... j'avais pas regardé le code côté PDF. Effectivement, il faut
faire un test d'existence là! if $_POST['choix']['x'] == 'truc' ...


*****
THINK -> SEEK -> ASK
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Oui c'est de ce cote que je parlais moi... ;-))

Donc tu formulerais ca comment?
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
if(isset($_POST['choix'][0]))
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

un truc dans le genre
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

J'ai maintenant ca :

<?php


if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {


$base="D:\\Qualite\Annuaire\Annuaire.mdb";
$Annuaire="Annuaire";


//connection au serveur:
$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;

//PDF


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


$pdf=new FPDF('L','cm','A4');

//Titres des colonnes
$header=array('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');

$pdf->SetFont('Arial','B',14);
$pdf->AddPage();
$pdf->SetFillColor(96,96,96);
$pdf->SetTextColor(255,255,255);


if (isset($_POST['choix'])){
$addInQuery = implode(',', $_POST['choix']);
$addInQuery = ','.$addInQuery;
}
else $addInQuery = '';

$resultat = odbc_exec( $cnx, 'SELECT Nom'.$addInQuery.' FROM Annuaire ORDER BY Nom');


$pdf->SetXY(3,3);
for($i=0;$i<sizeof($header);$i++)
$pdf->cell(5,1,$header[$i],1,0,'C',1);

$pdf->SetFillColor(0xdd,0xdd,0xdd);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','',10);
$pdf->SetXY(3,$pdf->GetY()+1);
$fond=0;
while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table
{
if(isset($_POST['choix'][0]))
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

$pdf->SetXY(3,$pdf->GetY()+0.7);
$fond=!$fond;
}
$pdf->output();

}


else{
?>
<html>
<head>
</head>


<form action="" method="POST">


Site

N° téléphone fixe

N° fax

N° portable

Adresse e-mail


</form>
</html>
<?php }?>

Ca me sort pas toutes mes données...
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Ca correspond a quoi les [0] [1]....?

if(isset($_POST['choix'][0]))
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Bon là, c'est ok, par contre, comment faire pour que lorsque la case n'est pas cochée, la colonne la concernant n'apparraisse pas...???

<?php


$base="D:\\Qualite\Annuaire\Annuaire.mdb";
$Annuaire="Annuaire";


//connection au serveur:
$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;

//PDF


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


$pdf=new FPDF('L','cm','A4');

//Titres des colonnes
$header=array('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');


$pdf->SetFont('Arial','B',14);
$pdf->AddPage();
$pdf->SetFillColor(220,130,130);
$pdf->SetTextColor(255,255,255);


if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {


$addInQuery = implode (', ', $_POST['choix']);

$resultat = odbc_exec( $cnx, "SELECT Nom,".$addInQuery." FROM Annuaire ORDER BY Nom");


$pdf->SetXY(3,3);
for($i=0;$i<sizeof($header);$i++)
$pdf->cell(5,1,$header[$i],1,0,'C',1);

$pdf->SetFillColor(0xdd,0xdd,0xdd);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','',10);
$pdf->SetXY(3,$pdf->GetY()+1);
$fond=0;
while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table
{
$pdf->cell(5,0.7,$row['Nom'],1,0,'C',$fond);



if(isset($_POST['choix'][1]))
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][5]))
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);




$pdf->SetXY(3,$pdf->GetY()+0.7);
$fond=!$fond;
}


$pdf->output();

}


?>
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
tu declares choix[] comme un tableau de valeurs
choix[0]correspond a Societé
choix[1]correspond a Fixe

que tu charges dans $addinQuery
tu es bien obligé de tester chaque checkbox pour construire
ta requete sql
alors tu dois tester aussi pour la recup et l'affichage des champs

bon si ça ne plante plus c'est déjà mieux
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
$header=array('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');

pareil tu dois concaténer $header en fonction des cases cochées
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Houla ca se complique pas mal pour moi là... tu pourrais me faire voir stp ce que ca pourrait donner avec mon code ?

<?php


if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {


$base="D:\\Qualite\Annuaire\Annuaire.mdb";
$Annuaire="Annuaire";


//connection au serveur:
$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;

//PDF


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


$pdf=new FPDF('L','cm','A4');

//Titres des colonnes
$header=array('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');

$pdf->SetFont('Arial','B',14);
$pdf->AddPage();
$pdf->SetFillColor(96,96,96);
$pdf->SetTextColor(255,255,255);


if (isset($_POST['choix'])){
$addInQuery = implode(',', $_POST['choix']);
$addInQuery = ','.$addInQuery;
}
else $addInQuery = '';

$resultat = odbc_exec( $cnx, 'SELECT Nom'.$addInQuery.' FROM Annuaire ORDER BY Nom');


$pdf->SetXY(3,3);
for($i=0;$i<sizeof($header);$i++)
$pdf->cell(5,1,$header[$i],1,0,'C',1);

$pdf->SetFillColor(0xdd,0xdd,0xdd);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','',10);
$pdf->SetXY(3,$pdf->GetY()+1);
$fond=0;
while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table
{
$pdf->cell(5,0.7,$row['Nom'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][5]))
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

$pdf->SetXY(3,$pdf->GetY()+0.7);
$fond=!$fond;
}
$pdf->output();

}


?>
<html>
<head>
</head>


<form action="ann.php" method="POST">


Site

N° téléphone fixe

N° fax

N° portable

Adresse e-mail


</form>
</html>
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
au passage
if(isset($_POST['choix'][0])) --> Societe (1er poste tableau =0)

c'est plutot decomposer le $header que le concatener...
poste par poste avec une boucle probablement
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Ok par contre, j'ai ca :

$pdf->cell(5,0.7,$row['Nom'],1,0,'C',$fond);
if(isset($_POST['choix'][0]))
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

Et ca me donne undefined inex pour toutes les cases que je décoche sauf celle mail...??
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
ah bon, alors remets comme c'etait, si ça marche .j'ai peut etre fait erreur...
Messages postés
528
Date d'inscription
mercredi 28 septembre 2005
Statut
Membre
Dernière intervention
6 mars 2009

Non en fait c'est comme ça depuis le début, mais ca fait rien ca avance quand même grâce à tes infos t'inquiètes!

Mais là c'est vrai que c'est chaud pour moi!

T'as une soluce pour corriger ça ??

Je re balance mon code actuel :

<?php


if (isset ($_POST['submit']) && $_POST['submit'] === 'Valider') {


$base="D:\\Qualite\Annuaire\Annuaire.mdb";
$Annuaire="Annuaire";


//connection au serveur:
$cnx = odbc_connect( "DSN_Annuaire","" ,"") or die ("Impossible de se connecter à la base de donnée") ;

//PDF


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


$pdf=new FPDF('L','cm','A4');

//Titres des colonnes
$header=array('Nom - Prénom','Site','N° Téléphone fixe','N° fax','N° Portable','Adresse e-mail');

$pdf->SetFont('Arial','B',14);
$pdf->AddPage();
$pdf->SetFillColor(220,130,130);
$pdf->SetTextColor(255,255,255);


if (isset($_POST['choix'])){
$addInQuery = implode(',', $_POST['choix']);
$addInQuery = ','.$addInQuery;
}
else $addInQuery = '';

$resultat = odbc_exec( $cnx, 'SELECT Nom'.$addInQuery.' FROM Annuaire ORDER BY Nom');


$pdf->SetXY(3,3);
for($i=0;$i<sizeof($header);$i++)
$pdf->cell(5,1,$header[$i],1,0,'C',1);

$pdf->SetFillColor(0xdd,0xdd,0xdd);
$pdf->SetTextColor(0,0,0);
$pdf->SetFont('Arial','',10);
$pdf->SetXY(3,$pdf->GetY()+1);
$fond=0;
while( $row = odbc_fetch_array( $resultat ) ) //tant que c pas la fin de la table
{
$pdf->cell(5,0.7,$row['Nom'],1,0,'C',$fond);
if(isset($_POST['choix'][0]))
$pdf->cell(5,0.7,$row['Societe'],1,0,'C',$fond);
if(isset($_POST['choix'][1]))
$pdf->cell(5,0.7,$row['Fixe'],1,0,'C',$fond);
if(isset($_POST['choix'][2]))
$pdf->cell(5,0.7,$row['Fax'],1,0,'C',$fond);
if(isset($_POST['choix'][3]))
$pdf->cell(5,0.7,$row['Portable'],1,0,'C',$fond);
if(isset($_POST['choix'][4]))
$pdf->cell(5,0.7,$row['Mail'],1,0,'C',$fond);

$pdf->SetXY(3,$pdf->GetY()+0.7);
$fond=!$fond;
}
$pdf->output();

}


?>
<html>
<head>
</head>


<form action="ann.php" method="POST">


Site

N° téléphone fixe

N° fax

N° portable

Adresse e-mail


</form>

</html>
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
for($i= 0;$i<sizeof($header);$i++)
$pdf->cell(5,1,$header[$i],1,0,'C',1);

pour le header un truc du style

$pdf->cell(5,1,$header[ 0 ],1,0,'C',1);// Le nom dans tous les cas

for($i =0;$i<count($_POST['choix'];$i++)
{
if(isset($_POST['choix'][$i])
$pdf->cell(5,1,$header[$i+1],1,0,'C',1);// les autres postes si cases cochées
}

il faut tester je ne suis sur de rien !
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
for($i=0;$i<=count($_POST['choix'];$i++) peut etre même...
Messages postés
1216
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
18 octobre 2012
5
if(isset($_POST['choix'][$i]) )

et là manquait )